// Tiny, compressed Wordle utility library
//
// This library compresses the 77,832-byte official Wordle list to a
// 16,659-byte table and ~200 bytes of decompression instructions. It
// decompresses words one at a time, so the entire list does not need to
// be decompressed at once.
//
// Also includes a run-time 64kB hash table for fast, efficient checks
// against the word list.
//
// Ref: http://nullprogram.com/blog/2022/03/07/
//
// This is free and unencumbered software released into the public domain.
#include <stdint.h>

#define WORDS_TOTAL 12972
#define WORDS_HTLEN (1<<14)

// Iterate to the next word in the word list, writing 5 bytes into the
// destination. Returns the next iteration state. The initial state is
// zero. Do not exceed WORDS_TOTAL iterations.
static int64_t
words_next(char word[5], int64_t state)
{
    // Words are handled as base-26 integers and are delta-encoded starting
    // from zero. Each delta is a 4-bit length (1-15, 18) followed by that
    // many bits of delta. Uses high-bit-first bit order.
    //
    // The state tracks a delta-encoding table bit offset and the last word.
    static const unsigned char words[16659] = {
        201,115,221,126,223,209,197,+79,+44,+ 4,112,+49,195,+79,109,237,+12,
        249,224,199,+29,+40,223,154,+51,+89,+63,+44,255,241,145,169,208,+86,
        +34,+47,+84,186,+87,105,139,202,209,+95,116,248,+33,136,+60,121,170,
        107,+55,+ 4,203,+93,104,+45,+16,+39,237,+56,238,174,145,227,226,+ 4,
        172,200,+77,142,173,185,+71,130,+90,+30,142,225,158,+44,197,170,+34,
        +63,+ 4,243,+17,114,170,254,145,+88,171,+ 7,181,163,248,128,+70,+40,
        179,249,+13,+81,104,246,170,+75,+88,152,244,254,102,135,227,122,106,
        210,+ 7,237,101,234,234,+26,183,+39,156,+41,+56,205,206,117,+75,135,
        249,123,+85,210,+52,+51,240,+53,+67,230,202,209,+35,237,+18,+90,204,
        +19,137,196,+ 9,224,174,+39,+91,+67,104,+44,+82,163,249,212,+92,+86,
        +83,151,130,104,181,+88,+91,+69,+68,218,136,+11,+42,198,242,113,+59,
        185,+92,137,+ 9,253,194,+20,201,215,+10,153,+90,+42,235,143,+85,+48,
        +62,+85,129,230,+82,+87,+26,179,189,+92,+97,214,+55,185,+98,+95,218,
        173,107,199,155,168,135,146,224,107,103,+13,+41,161,+38,206,215,+70,
        209,114,176,126,217,231,245,107,111,220,+88,233,249,+39,176,+40,187,
        +44,205,136,185,122,205,+71,229,+95,232,225,230,+30,114,174,179,219,
        +31,+22,+42,210,235,+79,+54,+67,215,161,173,178,126,251,+15,+73,152,
        117,+60,138,181,206,115,217,+14,123,127,+41,127,192,244,185,+96,134,
        178,124,+23,250,+58,155,226,120,135,183,188,214,154,144,250,105,117,
        194,114,234,230,+39,207,214,242,+39,113,198,141,236,119,231,167,175,
        191,+58,214,+92,114,+53,+25,226,170,151,+57,+88,215,164,+94,+46,164,
        158,+90,118,205,168,245,111,136,+65,248,+70,+60,+10,194,146,+91,143,
        +22,+ 7,144,+93,+26,212,106,+34,198,245,113,142,+72,191,244,+90,206,
        +26,112,+95,225,160,+60,+10,204,208,166,150,+46,+93,240,+78,158,129,
        229,231,+70,+72,+53,+52,250,+85,175,180,231,145,+95,218,+84,245,143,
        +84,254,167,+13,+ 5,170,+23,+61,108,+79,+26,144,+28,103,247,+92,+14,
        218,233,220,100,+71,158,104,236,253,+54,176,172,237,228,100,201,235,
        198,174,177,+26,185,235,109,+13,+45,238,166,+68,+91,+27,163,251,205,
        +87,118,128,149,136,+73,226,210,220,214,+54,216,218,151,246,184,213,
        +43,+26,+53,247,220,+ 9,240,110,+79,+86,+98,137,+99,162,137,165,136,
        249,235,+14,138,+54,132,210,193,+87,226,105,248,182,+21,143,176,199,
        147,110,+30,+46,205,213,166,+30,173,+47,128,246,233,+71,221,168,+49,
        +93,+30,+51,+87,+61,+21,+90,158,114,160,243,+94,106,243,121,191,108,
        +68,+90,+28,254,173,132,179,212,157,+61,+50,+86,160,+35,127,+62,+56,
        +40,+81,121,107,243,244,180,246,180,255,+15,+57,+85,+ 4,184,+91,100,
        +65,+94,+61,232,218,+ 3,232,+45,215,+40,147,+82,+30,133,172,159,181,
        132,131,236,+20,+91,166,114,142,+45,196,+86,229,+67,150,+14,109,+11,
        155,253,+61,+49,253,192,195,104,138,208,+74,207,+15,+59,+49,252,115,
        226,150,159,108,133,110,239,+38,142,+62,136,219,+82,126,+35,214,182,
        245,233,+71,146,105,+ 9,+ 9,232,159,254,+52,173,161,231,+35,+34,124,
        247,189,+24,104,250,255,129,255,+22,103,144,126,168,181,198,+73,169,
        190,+ 3,206,+63,156,+69,+26,+43,242,132,185,+96,172,+73,208,180,133,
        225,224,+10,+46,+11,194,232,124,+25,212,134,124,230,142,213,+70,+44,
        241,167,207,+59,+53,+27,+97,121,149,145,167,181,145,231,216,154,144,
        254,105,+83,225,155,+ 3,209,+68,230,+96,151,163,121,196,235,101,122,
        + 7,222,108,117,+54,142,203,+54,+54,206,244,+ 3,198,+40,252,179,+98,
        121,120,155,+54,134,190,144,136,+84,+92,158,+66,+44,173,134,+34,+85,
        231,170,181,+85,111,+44,243,113,+92,186,+41,+58,+42,+25,158,234,176,
        159,+21,127,+99,171,194,178,141,100,+99,231,230,172,+88,+80,241,177,
        + 4,179,255,+70,121,180,+68,210,100,153,233,159,+18,172,+85,+92,+39,
        214,201,171,+60,106,126,181,116,211,229,+98,217,+80,+65,240,143,146,
        107,+ 9,+98,201,+69,210,184,241,253,+71,129,159,+ 6,+60,153,123,+87,
        219,+43,+94,+ 9,168,+69,+66,236,181,240,+30,136,234,+96,+25,144,227,
        +12,+90,226,+56,185,+96,181,227,166,176,144,137,149,+75,+43,158,250,
        253,+77,+29,161,188,+21,206,202,232,218,+ 3,+60,109,+84,+56,164,172,
        109,124,233,235,+47,135,+98,247,154,168,158,117,101,123,+80,156,165,
        +22,+21,169,174,+86,154,143,+60,+98,102,187,174,+99,118,+21,+19,211,
        233,204,214,135,148,218,107,+46,+90,226,+46,124,180,+44,+ 1,111,+53,
        153,+79,230,+55,109,+21,105,158,+12,251,+62,+41,+26,139,148,218,187,
        +53,+59,175,246,107,128,181,172,194,166,+80,+56,233,254,174,+ 3,235,
        162,181,+ 6,132,241,195,223,119,189,145,201,221,203,147,196,+31,+84,
        105,124,+88,195,+54,+18,239,+20,221,158,100,187,223,+31,+29,+54,164,
        147,+78,108,113,145,+94,158,+90,105,233,130,+11,+69,154,+34,237,+ 5,
        +40,121,+62,130,104,+49,185,121,115,213,132,237,226,138,+44,113,173,
        +56,107,+15,234,116,+80,+49,+64,127,198,156,+88,169,240,+94,112,178,
        +80,178,+80,178,212,214,150,+36,249,+87,172,154,+48,+43,185,+67,130,
        231,101,138,159,174,139,+18,208,158,105,207,+56,+49,+70,213,+83,202,
        116,195,226,195,+39,142,138,+22,+42,124,+20,129,209,226,228,209,+11,
        +45,197,146,133,143,211,235,+17,+67,163,167,162,+94,198,107,199,+69,
        + 2,210,143,139,140,+49,+85,209,177,181,242,133,142,134,+40,+80,177,
        +71,223,+92,+15,218,+ 1,242,+73,231,219,170,+72,+98,143,252,246,201,
        +39,164,141,172,196,229,158,193,+52,186,+54,133,234,122,211,224,189,
        +67,+94,120,+ 7,181,139,+79,153,235,171,+41,103,176,+44,148,+77,+22,
        +72,+20,+44,212,194,124,155,+62,+59,+44,148,+ 9,+73,128,+34,112,255,
        +39,209,145,110,+ 5,202,+53,232,204,+54,180,218,252,+89,255,151,+66,
        203,116,+97,222,+62,+38,167,+69,+ 6,108,+37,219,+19,209,+60,168,103,
        211,+74,+61,+33,228,253,115,+82,+29,+23,+88,215,+21,193,120,105,199,
        197,154,+25,203,126,122,115,247,213,137,+35,234,+44,165,146,129,+88,
        +90,+51,116,+40,144,121,+34,133,167,+85,170,154,216,130,185,182,+66,
        139,+49,242,198,217,+86,+55,134,+95,+ 7,106,199,193,109,+15,+42,+93,
        187,157,+61,179,+89,+56,+46,211,142,222,153,186,166,+39,181,+45,+16,
        +71,143,+91,159,149,173,215,137,+46,216,+99,143,228,+81,162,+65,179,
        +61,+69,206,+ 6,106,222,254,173,235,175,132,223,173,+33,+25,166,156,
        245,+17,206,+90,199,154,+64,169,240,+66,217,222,+94,100,199,171,139,
        +65,+66,203,204,117,+94,168,176,201,+54,218,210,+ 3,+95,182,+49,231,
        193,107,+81,248,+58,+94,+79,214,100,163,+98,+77,+22,139,169,218,+90,
        104,118,150,116,153,+10,204,116,+80,178,222,185,191,+84,+84,158,+57,
        105,120,152,144,196,+18,160,162,202,246,199,135,205,+57,167,+30,+37,
        +14,+98,+82,243,141,136,+49,102,+95,131,+16,+65,155,+97,+99,226,213,
        + 4,162,213,113,161,+48,241,215,145,+47,201,+36,161,241,100,152,+79,
        +86,116,210,+85,175,159,+29,151,108,+71,231,+99,158,+29,159,+ 4,233,
        126,+42,186,+30,+92,+ 6,+23,+25,+50,126,184,+30,+14,251,105,+ 6,208,
        153,+10,101,224,174,+85,+78,+74,142,+48,199,+ 5,150,230,156,+19,179,
        226,233,251,220,+84,202,+72,225,180,+53,166,154,154,+46,+48,237,+13,
        161,+52,146,165,175,108,+22,+99,226,197,+79,130,+18,165,218,+99,105,
        +88,+14,+90,178,+68,+39,215,+71,254,+70,157,+63,+83,211,159,133,+52,
        153,122,+99,131,133,130,+40,165,226,180,+80,163,126,107,145,249,+63,
        +89,147,205,146,113,166,208,123,+18,114,147,+14,183,+53,209,+96,105,
        207,212,124,254,+81,+22,153,+89,104,+40,242,211,224,148,+59,136,+36,
        +77,194,211,147,+77,181,164,180,231,130,+77,+60,225,225,209,+73,172,
        +22,131,179,224,150,+90,138,+44,205,+ 9,160,+37,+30,193,184,+20,+79,
        +36,+18,133,151,+66,171,122,105,+40,211,139,+37,+19,+69,142,+15,+26,
        201,249,225,249,241,217,103,136,+74,+70,130,123,+64,151,+42,189,159,
        +29,132,185,+96,174,+11,+67,+68,+93,+14,+10,+44,111,+14,+88,+49,113,
        104,+69,154,224,+91,154,210,244,+43,+74,240,+93,170,+68,144,248,180,
        +79,135,110,103,135,235,+33,251,+89,+28,186,+69,+40,148,139,188,121,
        +26,193,193,+96,133,172,181,197,153,187,+30,+68,220,232,160,+94,145,
        250,+30,188,118,174,180,166,155,131,+96,109,211,+27,121,+20,252,184,
        +14,+57,202,101,+52,186,+44,167,+ 3,+45,103,197,150,+ 4,200,+75,+28,
        + 5,187,+29,133,+50,177,+20,+40,+89,+46,+49,+85,129,+40,112,+82,224,
        +20,184,205,+24,248,236,228,168,+90,201,251,+90,+90,+ 2,214,+79,154,
        210,208,186,+92,+15,158,172,+ 9,+68,217,224,+87,+70,188,116,147,+88,
        +79,+ 6,+40,112,+89,+40,214,139,+28,+31,157,133,227,111,+83,+87,129,
        214,+38,134,118,182,173,171,161,209,240,+83,+69,194,+18,205,105,+40,
        114,213,+10,223,+22,175,+69,151,244,210,112,245,187,+14,114,118,125,
        228,201,+67,199,+44,+37,206,+10,+37,+35,209,+21,+70,144,+80,104,207,
        +53,+69,233,161,+60,229,+68,194,133,+11,+20,+44,252,143,+17,+21,+38,
        221,+53,147,206,+71,184,237,+32,246,211,237,204,172,221,+18,141,136,
        176,201,+34,207,+68,254,141,177,254,+78,203,+68,+97,102,+28,186,+64,
        115,176,132,163,+72,+44,156,+79,+37,+18,+ 5,+26,113,103,150,+44,218,
        166,182,142,+ 4,246,229,+83,+75,162,108,253,+50,118,183,172,229,+15,
        147,+69,150,224,165,+83,199,+11,+65,+66,195,+20,+63,126,245,228,253,
        170,+52,130,207,152,124,116,+89,246,+87,178,143,+80,212,+91,249,241,
        100,171,+96,185,141,141,+45,+76,222,139,249,+20,+15,+35,197,+79,242,
        +77,167,243,+32,100,+15,+30,218,117,+ 8,161,+87,138,233,241,115,+34,
        +23,+88,+26,+59,100,104,173,+44,+45,+65,253,+10,+61,+67,+92,+44,251,
        +81,+20,+44,124,+21,149,+40,176,+31,+62,228,+70,163,+73,+20,100,212,
        207,103,193,+44,255,243,+83,198,+10,+32,141,100,234,101,103,156,127,
        163,242,211,+92,+47,227,+36,150,243,132,146,104,178,220,112,146,120,
        230,194,181,+21,108,+35,148,109,+15,+56,144,+44,+80,179,124,121,+86,
        182,+84,161,208,+87,+69,149,191,164,139,+22,+57,109,+37,+82,165,+11,
        +78,168,214,+79,130,+85,164,172,+43,203,+87,+42,+22,134,212,+78,+39,
        +60,+40,149,+40,+89,100,+58,+44,+84,248,+33,+40,181,182,195,195,229,
        208,176,231,+65,+10,+84,233,116,+44,+89,+44,+80,249,102,+74,+55,197,
        193,105,+63,121,194,207,172,124,154,124,+85,248,+49,140,126,199,200,
        +59,+46,112,154,105,203,+82,+72,163,239,+53,147,130,193,107,+69,230,
        +52,122,185,193,252,214,+67,123,103,233,142,228,193,+47,+66,214,143,
        130,218,+47,+27,+34,+24,117,+92,149,237,+78,+11,+20,105,+15,+17,+84,
        129,100,+40,+52,204,241,+89,170,+20,183,159,172,203,128,207,+ 8,152,
        +72,+60,+17,105,157,146,199,+17,+40,152,+ 6,254,+15,200,160,+98,197,
        +19,+69,+22,+96,159,+52,130,129,104,199,+ 9,113,206,+11,+20,+57,+76,
        158,+31,+ 5,+97,+28,+37,134,+42,+16,149,+44,112,176,+44,199,201,+35,
        133,137,+37,112,+58,+81,107,+93,+10,140,155,110,+ 9,163,244,201,+70,
        232,126,153,+ 9,243,+69,+74,+22,184,+74,+40,154,+56,+46,+57,+66,135,
        137,178,207,+70,118,+18,131,164,+ 7,+58,+ 9,217,+65,138,+20,+40,186,
        +45,129,+ 8,193,+24,+96,174,+75,+49,241,102,211,122,230,+80,161,227,
        +92,+91,+75,+44,231,+71,+67,+28,+22,+77,167,+79,+74,140,+20,250,202,
        +20,210,+89,+38,154,+40,179,156,+94,219,+36,154,+33,+85,157,230,+71,
        +73,+54,145,138,+30,166,143,174,108,147,+73,155,128,234,135,135,193,
        157,106,161,+75,209,222,168,+54,+ 8,194,182,233,152,+15,+23,+56,156,
        +76,173,+54,116,253,201,+37,209,237,158,+74,+36,145,170,+74,+61,123,
        +96,+62,+13,+84,128,181,113,139,197,127,201,+72,+81,210,135,201,165,
        209,110,108,+ 7,+99,159,+20,+56,+93,+ 2,183,149,+42,114,112,+56,+83,
        +41,179,178,139,+34,233,112,+54,+80,101,173,116,+42,157,+10,101,108,
        110,+13,+ 0,253,107,108,+75,+69,196,+ 2,218,126,122,124,244,131,166,
        134,+40,114,178,159,+ 5,179,222,241,+12,185,+44,+75,+58,206,214,151,
        +19,227,242,199,+ 9,114,137,150,128,154,+28,236,236,248,+33,+59,+88,
        202,172,199,199,151,174,201,+37,180,252,179,227,164,+74,+93,+95,117,
        221,+77,189,212,241,+62,247,+ 9,+34,205,141,+98,+91,+14,202,+29,+62,
        129,103,158,106,+79,+48,250,+11,+98,212,+89,245,+11,+53,+ 4,148,+78,
        +26,192,+78,138,+ 4,171,253,+70,+46,109,137,185,+30,149,228,222,101,
        186,+63,216,199,145,186,+74,188,+58,232,218,+23,+73,236,207,230,+60,
        +88,+22,227,179,242,205,+72,237,169,150,+95,+11,148,120,+55,138,+79,
        +23,+46,120,+80,177,+66,205,+28,+33,+79,175,+ 9,+86,162,124,+80,179,
        +68,+40,+22,178,180,+62,+42,194,126,126,+89,+40,112,+80,233,102,+24,
        237,121,+44,189,+31,+60,113,210,121,+44,245,235,128,+79,+75,165,+30,
        + 8,178,+80,176,233,+18,201,+69,208,+45,+57,+50,241,203,+ 9,235,+83,
        +58,+40,+24,146,+39,+19,201,+73,178,+30,124,+41,+36,162,220,118,124,
        +18,203,+34,216,209,139,+45,201,+ 2,197,+ 6,+40,183,+52,+ 3,168,150,
        + 4,252,+37,+90,164,+70,138,+31,+61,139,+94,+63,105,209,+38,+73,+62,
        250,+93,168,183,230,136,178,159,+44,+99,+ 4,248,+43,+ 9,120,141,+29,
        +20,+ 8,+74,181,216,233,+12,215,143,158,117,+52,218,+23,167,214,+46,
        216,+15,218,188,121,218,185,243,222,182,+72,186,157,+21,+44,213,+60,
        139,+43,+88,+82,+77,+93,+50,178,+20,+92,151,+67,177,207,+11,+28,+44,
        199,197,150,+ 4,233,217,226,232,176,151,+93,+15,+18,149,254,+ 6,106,
        + 5,+14,203,132,160,239,132,124,112,188,+31,+ 4,171,+72,+11,+89,+62,
        184,+84,+77,+36,150,211,224,190,+17,216,231,139,+65,225,243,+64,+59,
        +73,+29,222,241,+46,+67,+28,+52,244,203,197,142,154,+44,112,+88,240,
        +35,+39,214,101,160,+43,129,+69,144,232,171,+64,189,136,+74,+29,+20,
        +44,122,+92,+41,167,164,+62,+74,172,+43,234,120,115,194,171,213,+81,
        121,243,+34,+65,213,+15,119,185,133,220,+99,224,181,132,141,+76,186,
        174,+69,+43,246,+62,+35,193,172,179,225,+76,202,208,+10,+61,137,100,
        162,248,220,+14,139,+68,+33,185,204,+90,116,220,226,+59,+61,219,+96,
        123,+52,196,247,169,147,245,148,177,+83,224,133,+50,190,+20,+58,105,
        + 7,+69,150,226,205,136,177,+98,135,107,250,+81,245,+27,+35,+72,120,
        +34,205,+17,114,124,181,248,+37,154,161,201,+88,141,+29,+36,103,157,
        186,158,239,+39,+61,+97,+36,164,110,102,+46,+63,136,129,212,124,114,
        177,209,193,+61,+11,104,127,216,255,223,+49,+68,121,255,242,+89,253,
        +16,+50,+49,211,130,+47,141,130,+50,167,109,+82,+35,+21,+23,139,+77,
        +76,152,124,169,149,166,134,+89,+22,+ 3,246,218,154,159,+86,105,+99,
        246,208,208,+18,143,148,246,+37,+27,+75,225,+45,+11,161,104,159,+37,
        +19,+77,+33,112,+94,+26,163,203,+92,+74,172,235,+ 2,124,248,+43,+18,
        +73,100,+72,+46,133,154,+67,+90,104,+79,+36,250,+ 9,+ 8,240,182,+ 3,
        224,196,+17,191,+38,+30,184,248,178,220,250,+43,163,103,+93,+34,+50,
        219,163,144,214,+78,206,158,133,167,+60,228,234,171,116,+74,163,+84,
        124,+31,+52,+32,158,+ 5,167,133,115,107,+71,+37,+75,+28,166,151,+21,
        160,179,+86,+59,+88,+90,+ 9,118,211,+17,211,177,206,194,+22,178,185,
        140,+88,+99,183,250,+40,217,194,+89,167,+62,236,223,+37,159,+65,+40,
        154,+93,+22,+99,229,209,102,+62,120,+54,204,151,106,+79,+33,+20,+73,
        128,139,+78,204,180,+47,+71,239,+14,246,+ 5,211,243,214,159,188,196,
        106,154,153,250,104,+45,+53,167,+22,105,+ 7,237,133,+36,179,+60,+91,
        109,107,+ 9,+23,138,+46,+84,170,109,224,+30,112,186,198,191,133,176,
        150,127,101,162,113,+40,218,183,105,217,138,166,151,147,246,184,216,
        146,+73,162,201,+70,148,116,177,175,239,222,191,172,139,163,225,+69,
        +22,+33,+81,+89,153,249,176,182,130,239,+46,+84,+49,+50,+40,+89,170,
        +77,102,214,188,144,130,127,196,214,+84,+22,251,150,+32,+ 5,203,190,
        +51,+88,191,128,190,+41,126,149,153,190,+62,+50,241,+55,+25,240,+75,
        +52,150,154,+89,177,182,244,145,104,130,+54,231,170,109,+47,211,+16,
        +69,153,234,162,113,+54,202,106,230,253,172,159,+ 4,180,208,+15,148,
        116,+90,+50,205,+68,+47,120,216,162,+58,214,143,130,179,+29,+20,+44,
        158,104,133,151,101,177,224,159,217,247,158,250,101,+70,137,+59,147,
        109,+89,219,+65,242,105,244,+11,+61,130,212,+88,163,196,+52,133,154,
        +46,101,214,149,192,254,+46,+73,+ 2,133,158,114,107,+50,173,100,248,
        +45,161,184,+45,129,123,182,239,+59,+89,252,116,231,+ 7,152,183,+45,
        + 2,+87,212,+15,+ 8,234,+62,179,+72,107,+77,+41,231,+15,163,+74,211,
        +91,+67,206,+63,130,244,148,124,169,143,+30,217,+54,125,+20,+57,135,
        +91,105,101,168,233,+96,108,147,245,+69,+92,170,196,245,+19,+17,+84,
        + 2,+40,183,159,181,102,192,+88,102,138,+23,130,122,246,192,126,214,
        +35,178,118,214,143,+86,+52,147,100,104,+ 5,+18,137,+54,222,183,189,
        169,226,220,246,+ 7,135,197,146,133,134,110,165,+95,+89,+40,214,+79,
        130,+90,166,+90,+93,+36,208,+15,154,194,+65,116,+44,183,+22,105,+11,
        161,193,+69,160,179,211,+29,+53,146,135,+65,+95,+35,242,216,+15,131,
        +24,199,175,+78,+29,159,+53,214,230,112,154,+73,+52,229,137,+60,180,
        +68,+60,232,160,+90,212,120,+90,121,+98,167,+ 5,154,219,+78,+62,+44,
        156,+73,+22,+91,151,162,203,+68,+67,207,218,212,200,175,131,+29,147,
        162,129,242,+46,153,+36,+81,162,159,+38,+86,209,150,181,193,+36,146,
        +57,+89,+79,155,+66,204,176,140,+85,116,184,+17,+57,+42,182,173,167,
        193,+93,+27,+67,+79,107,+43,+64,+94,110,224,232,241,115,+62,+10,109,
        229,+15,+86,101,240,+47,+27,125,+10,112,112,178,166,139,164,211,+73,
        +65,202,148,+ 9,+68,232,+90,106,216,148,+88,202,222,219,+60,+18,202,
        221,210,+75,115,+78,+74,+60,+21,193,+41,251,103,123,221,164,202,+35,
        221,141,201,244,+23,+70,209,+16,+ 9,161,206,+27,+59,+84,105,+ 5,159,
        146,+33,+69,+79,231,+90,125,+ 0,196,222,+48,213,202,158,162,117,166,
        178,126,241,+81,216,104,+77,+89,176,+22,122,+39,222,+75,+20,125,132,
        194,232,210,+11,+68,+73,108,+29,127,+93,+11,+54,+38,148,116,220,+86,
        +88,242,+22,142,+73,240,+94,161,+40,218,+39,181,+46,214,+79,215,167,
        176,+58,+72,+22,+93,146,+69,146,171,107,126,137,+65,103,228,+44,251,
        +53,+98,+42,163,244,194,+88,139,156,+44,+ 7,205,157,170,220,114,190,
        + 1,197,212,+10,233,220,206,174,255,+46,135,+42,+45,159,150,127,154,
        220,197,247,+93,+78,129,254,245,+47,+57,119,194,127,+84,230,234,+20,
        237,241,+75,+45,193,120,+35,232,141,+28,+22,+11,212,+62,244,+70,+74,
        +52,+26,159,+39,247,249,+41,+13,140,244,177,230,122,107,+37,+14,127,
        +16,+75,146,+92,142,254,194,229,+81,236,248,+53,+69,+90,155,196,+62,
        246,119,160,255,104,+56,187,153,185,120,186,+49,126,252,203,126,238,
        211,119,248,155,157,201,173,+31,+95,184,222,206,237,184,+59,180,172,
        +65,107,155,188,109,205,+44,+67,163,+23,146,143,207,194,+93,+82,244,
        +90,+74,128,+91,+88,+91,120,+63,120,233,141,+35,193,+50,251,100,152,
        +57,182,188,100,115,219,149,113,+38,159,+17,+55,141,185,+19,170,230,
        148,+90,+94,180,250,+47,+23,+11,181,+47,+99,+64,247,237,160,160,111,
        +64,+30,+86,+59,+69,218,153,243,252,164,+ 2,242,239,237,+85,+85,247,
        +27,+90,+73,164,+92,+94,+70,+25,116,184,162,108,227,+15,+48,+36,247,
        +13,153,230,151,+73,159,139,+94,+40,+60,229,201,+33,245,+82,248,191,
        173,149,153,+79,138,196,+17,226,163,160,152,127,232,158,215,+ 7,168,
        +77,+82,158,+99,249,230,+30,122,+52,+11,+35,203,+60,+69,113,+88,213,
        188,243,248,+68,+69,171,196,+10,105,+ 3,153,148,+82,+23,113,+27,113,
        228,202,+57,+72,171,172,+58,239,+39,113,+93,+62,139,109,254,106,+94,
        +40,239,171,+89,131,165,222,182,246,178,121,144,209,140,229,118,+56,
        246,212,141,+42,+25,207,222,248,232,226,+34,+87,136,231,243,+62,+70,
        +26,179,252,+68,163,+67,+84,+85,177,191,123,205,191,+43,102,200,217,
        +69,186,253,238,161,187,104,175,219,121,164,216,166,163,127,+83,214,
        155,145,+84,126,166,237,115,233,+90,+77,183,+53,151,132,+90,+31,245,
        183,222,128,100,+40,218,+44,117,+30,+66,166,149,+97,+76,165,133,209,
        157,230,101,108,+57,167,114,127,119,116,+65,109,+ 5,+86,234,235,145,
        123,126,151,194,190,160,105,219,+88,+34,110,188,+61,109,+93,168,113,
        250,147,+53,+28,106,116,+46,107,115,228,+60,140,108,171,197,189,+66,
        232,+51,199,166,111,138,159,169,104,138,155,+96,136,+93,212,+75,+67,
        137,227,239,+ 5,226,178,+ 0,119,+78,215,+67,153,+ 8,+10,191,205,161,
        173,+30,237,171,+59,136,+67,248,+71,180,248,+33,106,177,+30,+73,+68,
        +40,169,240,+86,103,222,153,225,224,+34,204,+90,107,229,165,232,170,
        111,166,150,+99,224,182,114,203,+28,247,199,193,+44,213,+15,+99,153,
        +18,119,168,137,185,252,198,173,+ 5,+40,154,+88,143,138,+54,134,168,
        126,+85,229,171,+92,199,+25,117,+40,144,+74,+29,159,+ 5,234,+15,147,
        +75,163,+74,+72,+45,+15,193,+27,163,167,175,108,+ 7,239,120,245,139,
        +34,237,+16,182,252,144,+88,+82,+77,101,161,172,207,+32,216,+75,+ 6,
        +32,111,+59,+30,226,209,165,+63,154,+84,249,247,+91,+68,+84,+79,252,
        209,+82,120,227,224,157,159,166,+94,+58,108,+86,222,211,211,+75,156,
        193,179,+40,174,143,160,186,+54,131,199,182,173,+53,+48,139,222,+60,
        +21,100,+ 7,152,105,105,+34,205,+13,225,203,+61,+75,111,124,+36,163,
        228,190,+26,208,+89,190,+46,141,+81,229,162,+ 8,179,215,112,109,193,
        106,205,152,232,233,+52,+89,180,+77,+84,150,+73,+22,122,146,235,+74,
        224,126,214,+94,169,184,164,147,+75,+19,121,105,231,115,+89,+77,+73,
        +84,232,249,239,+99,209,+49,+71,153,248,203,164,+71,+98,138,117,+21,
        102,128,144,+73,189,+11,206,+68,+17,102,125,232,221,+60,106,232,144,
        107,+39,197,146,177,+40,+62,+11,104,136,154,+70,+42,+73,+87,181,185,
        125,+63,152,237,106,+92,+15,130,+22,186,191,+30,+29,+20,+44,116,116,
        +89,110,110,233,249,207,214,146,235,+41,217,240,+91,+66,232,213,+18,
        147,113,212,+83,138,+36,+64,207,130,214,154,+18,232,154,109,201,+83,
        231,245,120,134,144,253,+69,159,101,254,211,143,+64,125,+62,+ 8,106,
        156,159,+ 5,180,215,+ 7,187,179,205,130,118,+44,116,147,+73,+89,214,
        210,203,+57,241,101,128,224,177,+98,197,142,+23,+69,153,+40,114,+58,
        196,177,+44,229,+75,+38,146,151,+ 3,+69,150,197,208,184,+66,185,188,
        115,207,175,203,170,+64,178,122,225,+48,225,101,+62,+11,230,142,124,
        122,185,174,129,+72,165,+15,131,123,212,153,+73,+28,+46,139,163,213,
        +37,207,147,107,+18,+72,177,201,217,193,+69,156,101,184,173,237,178,
        254,126,+88,187,+76,+93,+82,139,+ 1,218,+68,162,194,211,146,+ 9,116,
        163,125,184,+63,104,241,+17,109,+30,+70,235,+38,139,+84,+ 3,152,+62,
        127,+26,160,171,162,192,211,154,244,209,+17,160,125,+ 5,209,224,235,
        +50,172,+13,+64,+97,142,151,130,201,168,244,+76,240,146,+25,+48,247,
        143,149,+16,+66,207,148,250,+ 5,170,249,+30,+37,+11,+22,+89,+10,+36,
        203,149,+88,+78,155,+97,101,128,249,234,+ 7,+59,+44,124,221,138,+71,
        168,164,240,109,+53,+50,+51,211,159,+44,169,+ 6,206,180,196,+94,118,
        199,197,136,209,251,+90,153,+37,234,+87,+79,+35,+91,146,+71,+45,157,
        109,+11,+96,+76,+28,+45,199,205,+56,240,161,209,217,251,104,184,+24,
        108,+39,193,+11,104,107,+ 9,117,157,162,167,+86,+91,138,+20,218,254,
        124,+21,209,189,189,121,+99,147,227,176,150,120,116,173,235,154,248,
        186,+61,+57,248,+90,201,201,217,201,225,243,+84,+42,+89,122,189,248,
        +93,+91,+35,202,+30,+92,145,121,+33,168,176,198,234,+57,209,+ 4,127,
        + 5,233,+41,+57,+ 3,204,+69,192,180,194,175,+82,176,+29,+52,+68,163,
        235,+31,+86,180,171,+44,+90,+59,+39,193,+12,207,231,+69,151,226,197,
        +27,+65,102,157,114,+98,+50,206,255,141,+28,179,+79,+44,177,188,202,
        +81,182,132,185,118,194,189,190,178,+80,180,194,247,217,+65,+62,108,
        +49,199,243,+78,243,+42,+34,127,+53,+37,253,245,109,174,175,224,152,
        127,+10,143,139,+34,204,185,159,158,+29,+63,+84,253,135,211,+61,159,
        + 6,169,115,235,+45,205,161,+98,+73,+ 6,+98,+25,244,+78,202,181,+17,
        207,222,216,179,+69,122,+ 4,171,195,+22,+24,161,209,+69,252,248,+37,
        154,145,219,+91,+40,148,105,+15,+ 6,248,139,+89,116,130,226,190,+60,
        +59,199,199,+82,+59,231,193,136,+34,193,+62,+65,209,+69,137,108,109,
        +13,161,+32,217,+23,116,252,+66,162,+60,+89,167,+37,+31,125,112,+62,
        +11,+78,123,+88,177,+36,+82,133,151,166,156,208,211,+37,146,171,154,
        232,154,122,132,163,117,136,100,+92,+82,143,108,+89,190,+53,+73,217,
        219,115,222,197,228,179,+90,+62,+11,255,135,205,+ 5,+37,209,173,+31,
        +46,147,+94,198,116,165,+84,130,205,241,160,+31,221,+72,+38,107,+38,
        +30,+54,118,198,249,+81,+23,124,+84,194,223,+19,+ 2,237,160,+45,+92,
        +98,133,222,+44,+99,198,140,116,188,+22,+25,+36,251,143,+ 3,+92,129,
        +46,215,+30,161,104,+44,+90,114,+99,164,129,243,219,+76,+11,+29,123,
        149,+54,217,228,128,+50,101,+54,221,238,+30,+34,219,154,104,+91,+51,
        +47,213,+97,+35,+84,112,+88,+47,+88,254,147,202,+86,226,123,103,168,
        124,+87,141,187,+58,105,201,183,181,+44,218,+27,+20,+69,223,+37,174,
        +22,138,+11,101,+62,109,+13,+82,+37,213,+10,+83,103,+77,+58,123,199,
        208,+44,183,+37,+74,180,227,244,209,220,122,138,+61,179,239,175,245,
        + 4,+98,+80,116,+80,+55,107,158,+69,115,+38,143,139,+55,+66,237,164,
        236,253,173,+37,+18,139,113,+86,234,148,175,244,+19,210,137,+69,128,
        248,236,185,192,+91,+59,193,+ 6,+35,183,+ 3,+37,211,+75,+50,234,124,
        220,215,+67,228,219,121,+88,139,222,238,151,+59,+40,116,+89,+96,106,
        +15,+80,183,+14,157,+94,146,129,+93,+14,214,134,129,123,106,124,+18,
        203,115,199,+31,+45,237,228,250,232,119,165,+20,+22,+ 9,250,202,210,
        +74,236,124,209,+18,206,225,+46,143,+56,244,+75,113,103,171,+40,145,
        +44,116,246,+15,+57,+81,+21,238,222,178,+62,+79,+56,155,+62,+72,196,
        +93,+55,+53,+99,241,+84,+67,125,249,139,170,+99,+22,+62,+44,154,122,
        +38,168,125,+19,+70,163,+16,216,144,175,+11,145,226,234,177,+21,104,
        +43,226,126,+34,+41,101,249,110,+44,154,+74,+22,+74,+54,130,197,+79,
        203,+45,197,150,226,203,113,+98,201,+71,194,125,+10,143,+37,218,201,
        250,204,208,155,+65,102,144,208,+18,145,129,136,124,+65,222,+52,180,
        +72,+31,197,178,183,103,164,+29,161,150,157,+61,169,174,143,+ 4,154,
        +93,+35,117,+56,+51,+70,242,+54,+ 5,+97,+60,+77,+31,+44,231,205,+24,
        +97,154,201,+67,177,206,+ 7,+63,+10,202,+58,+69,162,142,120,186,+31,
        +22,105,+ 7,151,+ 2,167,103,+73,+ 5,204,184,229,+66,178,157,+46,111,
        +14,221,+26,114,208,186,+92,+35,+38,143,143,+83,+71,201,150,180,176,
        164,210,133,+79,211,103,103,193,+42,189,+31,149,+57,+59,120,235,213,
        114,205,+77,164,+45,235,202,196,158,+77,151,+73,+53,194,233,+51,211,
        162,135,105,+67,209,138,214,206,121,+90,202,107,249,193,115,192,189,
        169,217,242,+66,229,141,+52,246,207,+ 4,127,228,106,+12,+68,+15,138,
        +53,147,246,173,+80,240,180,192,+85,+ 4,+ 3,+21,+25,136,170,196,+31,
        +62,+ 8,+79,210,207,+ 2,144,172,+52,118,+21,165,127,+10,100,179,203,
        +22,106,231,101,162,+93,+17,+ 3,132,131,+72,139,146,244,148,108,+69,
        154,117,+87,200,241,204,+90,189,+60,129,101,185,183,+28,175,241,+88,
        106,+ 5,+10,+62,+50,+64,161,105,162,134,+76,+93,204,189,187,+93,107,
        +61,122,+59,186,+ 5,+46,145,171,+63,184,147,202,203,196,+65,244,+30,
        +89,+41,+61,132,102,+18,199,+77,+58,118,118,192,126,255,229,+94,114,
        122,138,167,+39,253,+71,218,+39,+17,187,+95,223,225,255,+30,146,+51,
        +45,128,253,188,+63,172,192,239,109,+19,134,171,+17,120,169,+76,+17,
        +54,131,227,+36,134,+76,+22,+91,130,217,203,+44,113,+41,109,+ 9,+ 8,
        223,+22,106,201,+38,197,+19,231,149,108,+ 7,193,+56,+73,+47,237,100,
        161,194,+73,111,+42,214,150,133,136,162,+89,185,159,181,+19,247,214,
        137,210,210,180,142,178,150,+95,142,155,+65,103,184,+40,180,+71,+25,
        +45,+24,+56,143,181,132,131,124,156,233,170,+22,+42,114,+89,177,+47,
        +73,164,210,105,+52,154,+44,186,+28,172,177,114,105,+15,+ 4,213,138,
        +37,+31,101,112,+62,+10,249,+50,114,232,126,223,142,+75,+ 5,115,+11,
        115,+77,+68,156,160,+95,210,+52,+47,+86,186,+60,116,251,103,197,222,
        138,+49,237,120,224,176,124,208,130,+44,247,103,231,141,112,178,124,
        +39,193,+77,+31,+29,172,201,+71,223,+43,+55,155,+77,152,+29,103,+74,
        +76,160,+89,242,162,189,+48,+65,241,106,200,205,+13,227,+94,113,+54,
        247,209,185,159,228,253,178,+28,180,+82,137,165,208,+41,151,142,120,
        150,222,214,+14,222,236,180,+79,135,+89,+90,+ 3,217,+38,+27,+66,221,
        +58,205,+86,+50,203,114,105,237,142,+18,+73,164,169,+86,168,+89,111,
        109,177,200,109,+17,+30,105,211,+11,182,137,154,102,167,+62,+90,166,
        + 4,109,+ 7,193,152,+ 5,229,+60,212,+58,169,243,+31,147,224,206,233,
        +83,+24,+53,201,+35,115,+21,+83,224,191,212,+80,+86,167,241,+40,+89,
        242,146,133,158,202,105,+ 6,152,208,+15,155,115,+78,121,104,195,+77,
        240,215,142,170,+10,132,244,+53,+ 5,146,143,190,223,234,124,159,+ 6,
        234,+47,213,158,+38,147,+16,147,242,201,+87,239,138,100,199,145,+ 4,
        120,215,231,158,+26,120,150,208,188,166,166,+71,153,221,109,122,182,
        132,240,+ 7,243,185,181,147,242,205,137,118,127,199,240,+59,+63,+44,
        242,199,+ 7,199,+69,143,150,242,175,+ 4,246,205,100,248,+37,154,163,
        104,104,+81,+51,104,+41,+35,179,224,150,+89,+14,155,+65,102,195,+22,
        +37,148,178,105,+40,220,+18,+69,147,+75,114,232,178,159,159,172,165,
        150,+ 7,136,108,+39,193,137,+36,246,+37,+11,180,+ 7,144,+93,+22,101,
        160,179,110,+63,+43,+18,+51,129,138,+ 4,180,+91,146,+79,190,188,+12,
        248,+47,161,+18,+83,211,247,178,109,167,+71,139,+68,+67,+ 7,+56,+24,
        160,102,+72,105,+ 9,+67,211,215,130,+77,+60,114,201,+18,211,249,143,
        +26,203,219,250,188,137,+60,+68,220,+15,115,+51,+44,+91,+11,+77,+ 6,
        189,212,+10,121,202,253,141,161,231,+11,+36,+10,+22,139,217,+87,130,
        +95,130,245,+73,+ 3,178,205,241,241,+95,108,179,242,+92,120,+62,129,
        103,132,+76,+37,+83,+49,114,105,+ 5,155,+19,110,127,+55,149,200,201,
        +38,+60,133,+58,234,+76,199,211,+23,+36,170,+66,+86,+ 0,168,213,+49,
        227,+92,+60,107,+19,+35,191,124,100,167,+37,152,240,248,+43,226,+97,
        236,+39,225,168,+13,+30,+94,236,120,117,212,162,182,+52,106,209,103,
        241,+ 3,141,+ 3,222,172,+85,+26,+94,166,235,+74,239,109,241,226,145,
        145,199,185,+54,+46,218,+31,174,234,140,189,109,131,224,220,+72,+36,
        179,+76,+37,251,215,238,+79,254,250,190,249,+13,232,+58,147,151,148,
        +77,143,+57,178,+46,109,+27,199,+51,+ 4,150,184,120,+ 9,196,193,+53,
        148,+98,249,179,+35,157,+61,+ 3,120,106,+79,+66,214,163,+67,144,194,
        +58,+40,254,199,+87,+53,205,148,165,119,+ 3,134,222,213,+26,+75,+73,
        173,196,144,202,212,+52,+53,182,102,+23,241,122,+55,175,106,+15,+78,
        +16,196,+28,+45,+68,163,209,157,180,+ 6,149,+49,138,218,+94,+42,+13,
        185,229,215,199,247,136,171,+93,170,133,+80,232,249,234,+99,+52,216,
        234,156,+31,+54,169,223,+39,+ 4,170,133,+16,168,140,198,+12,179,+98,
        +46,251,+ 7,209,250,122,+ 3,149,129,243,167,118,201,+53,132,235,+52,
        187,126,+49,189,191,246,+ 8,216,208,100,227,159,226,162,221,217,187,
        +68,+62,+45,176,126,100,+16,+46,160,+79,195,+83,+70,246,130,+51,145,
        186,203,184,+85,196,174,+55,228,+95,+49,254,+68,195,187,220,+94,157,
        +84,+70,188,156,234,247,231,253,+ 1,+46,161,+76,209,113,+48,136,+89,
        104,249,159,212,224,110,+19,+26,+54,117,212,178,218,251,+53,+47,170,
        +72,132,180,198,113,108,138,+57,209,+65,154,+99,235,+45,+49,165,126,
        162,207,+57,+58,123,+94,+62,+13,+94,+68,211,104,106,203,+44,+68,+98,
        +20,125,+52,+84,199,141,+61,115,136,243,+97,152,249,175,+78,+27,+92,
        +91,204,245,231,156,136,189,+91,121,188,139,+54,+37,209,240,158,+65,
        +53,+82,222,+97,123,135,120,149,148,+45,+24,200,153,+77,125,+52,245,
        117,182,134,+89,237,166,170,+90,+19,+81,+ 4,127,247,141,143,165,+69,
        211,134,195,228,161,+87,+69,+ 8,138,+ 2,+73,127,+62,+13,213,+81,105,
        175,159,+46,+37,+23,119,175,161,+31,+70,157,+27,+ 6,216,208,+10,+29,
        +92,198,+47,145,+34,152,194,184,105,240,+75,122,+65,+77,209,153,+79,
        231,+60,+40,+89,177,+70,102,165,157,108,233,169,+ 2,240,+83,230,+31,
        + 4,179,251,198,+96,253,237,139,+62,+81,105,133,202,198,129,116,138,
        196,109,+43,113,+76,+17,+58,+52,125,+15,222,105,232,219,+65,227,213,
        +38,231,114,107,+79,138,+90,163,239,171,219,109,162,122,136,156,+60,
        114,+81,242,171,+60,204,+19,+59,+98,+82,163,147,250,159,198,130,+32,
        +51,+31,+37,206,162,204,+90,+41,+15,168,+89,244,143,167,198,127,249,
        246,142,+27,+ 1,120,129,206,+79,+17,232,198,+79,120,214,189,100,224,
        139,106,+66,+43,145,237,108,+17,150,110,+77,162,170,+60,232,+47,+56,
        242,179,+81,181,100,210,105,184,+36,147,+73,163,227,201,253,159,+66,
        +57,205,185,173,158,189,+36,+76,+27,+67,+96,+56,107,+81,108,+62,106,
        135,+39,107,+18,+73,162,+68,+57,231,162,213,+21,+39,182,122,227,194,
        143,+40,+25,207,195,+16,+53,137,108,+75,+20,104,139,+41,+84,163,209,
        +61,195,195,+69,204,187,232,+68,+82,+42,+49,+31,+60,+40,251,165,230,
        164,+25,171,212,231,136,195,+92,152,+33,230,+38,246,243,+59,+69,+33,
        +21,201,147,102,+46,+74,+76,+86,214,+94,+ 9,+52,112,180,+20,+93,+27,
        +66,205,+21,250,205,243,+52,+86,151,108,173,+80,179,+98,+44,216,139,
        +62,+49,+72,182,+ 4,172,+66,215,101,134,+36,+77,208,250,161,+85,+73,
        +38,142,176,188,+66,113,+60,124,154,106,141,+81,227,227,222,246,203,
        +74,254,255,181,+17,+27,+69,+78,121,165,+79,188,142,117,+95,155,195,
        +88,+90,+91,155,112,+88,174,+19,+35,+78,119,153,+82,126,+38,145,124,
        +73,127,+22,181,196,106,+45,+69,+26,113,211,210,+77,+56,+90,+60,135,
        +71,171,108,211,+17,+56,107,+71,211,238,221,+32,191,212,108,+26,227,
        +84,+93,+19,+73,166,208,+89,241,166,142,+95,+18,+69,146,139,162,222,
        188,150,108,+83,114,+44,+17,+64,136,+98,+74,126,+39,228,105,205,121,
        251,227,190,148,136,121,240,+90,+ 1,244,+79,143,103,+71,157,211,201,
        +69,102,129,117,243,113,154,184,+61,+70,+64,105,+51,126,+15,+22,126,
        165,110,220,+31,169,109,+46,211,+79,+83,+87,+10,109,160,224,187,215,
        156,+92,242,197,+85,101,+89,175,119,146,+79,214,219,218,+90,117,+54,
        178,156,149,189,182,140,201,+96,174,151,222,205,+25,116,136,204,+92,
        107,207,+76,+17,+21,167,193,154,173,177,189,220,217,+83,+24,+71,+56,
        179,103,138,+11,+90,122,+40,182,+69,+82,106,+69,185,238,166,164,+44,
        244,209,+84,106,203,+51,204,+79,148,116,+22,206,247,205,+25,229,202,
        196,+18,102,+88,161,148,155,115,201,119,149,133,180,180,208,183,+83,
        194,239,+96,217,238,+33,+95,133,250,+46,+94,114,+ 0,+37,+22,+59,232,
        +24,157,100,+18,+60,138,252,171,228,243,143,+ 9,+60,100,198,181,+57,
        235,124,+53,135,148,+28,171,120,155,242,+52,+23,114,143,184,184,+45,
        147,+54,+62,162,210,244,241,+56,191,216,153,194,231,+79,162,+78,247,
        222,+ 7,216,104,+77,209,116,152,138,173,142,+78,205,173,+28,157,+60,
        +77,+66,163,234,172,+85,104,170,119,+52,+14,176,+89,+19,+ 5,149,174,
        164,158,109,125,138,169,240,+66,+85,229,163,232,+84,232,160,+94,162,
        116,230,201,+57,+43,108,152,216,180,217,199,105,166,134,216,+82,+79,
        +78,126,+89,+99,+72,207,+90,124,+22,156,149,127,120,155,+62,+84,+97,
        147,+69,151,147,224,181,103,128,105,+17,+20,+58,+89,135,+75,159,+38,
        158,112,179,242,+79,118,218,138,158,+63,+84,245,107,+41,+98,199,203,
        +49,210,240,186,+22,105,+ 1,122,243,231,237,+62,+12,+88,139,+22,+40,
        148,122,181,209,112,+58,+40,+89,123,+40,116,+89,122,126,165,161,229,
        214,229,149,116,+63,123,+38,202,254,165,218,201,240,+98,128,240,+15,
        170,124,217,+23,150,156,+90,+52,167,193,123,200,236,159,+54,+72,157,
        +60,243,+90,+63,136,+36,+69,+11,121,156,126,178,150,+91,139,+55,194,
        203,114,104,+37,+86,224,172,167,+37,+75,+22,+28,241,+50,179,+37,+26,
        163,197,204,247,+54,146,204,148,139,+ 3,208,173,+79,182,240,+75,161,
        +98,203,+67,199,+76,+16,124,+89,234,+91,112,+86,+99,163,165,190,120,
        213,242,102,131,251,140,+38,188,112,+93,239,138,+47,175,+64,253,105,
        165,209,116,121,198,180,158,+45,+31,232,227,181,167,231,+93,+39,197,
        +63,136,244,+77,+26,148,+97,159,125,191,197,117,242,+11,167,154,+28,
        194,109,104,185,+96,182,+50,179,+82,+76,120,218,+42,112,+76,+32,152,
        243,+61,+48,160,205,148,252,+49,+74,+45,+20,+19,136,208,+29,166,151,
        +56,207,197,182,+55,+71,143,136,218,+26,113,227,251,134,+48,207,+98,
        219,+22,117,165,227,110,105,+78,138,+ 5,177,199,+38,+37,205,+57,224,
        158,196,169,+81,206,+11,+20,+44,188,157,+21,+44,216,218,170,216,154,
        +56,+73,+68,+57,121,+89,+75,+21,+58,+40,+18,201,195,226,133,150,149,
        228,179,+72,+44,148,120,+34,199,199,113,233,138,147,104,107,+39,+79,
        +66,176,+79,121,+16,+70,211,+49,217,227,118,109,+15,+88,116,214,+79,
        130,208,+14,138,+63,180,254,167,+69,+ 2,214,+94,169,160,249,+43,252,
        180,121,153,166,178,174,143,108,+89,+40,240,103,203,139,199,172,+43,
        201,252,+65,+30,113,229,+94,188,248,240,249,116,109,+15,+44,+89,255,
        202,172,211,245,+77,124,+89,234,219,106,244,156,+24,+99,151,151,+42,
        +86,+38,115,123,196,+17,102,104,+83,251,+78,180,+89,124,138,+35,+89,
        +63,154,141,+99,+40,125,+49,+66,242,149,+25,+36,208,+26,+17,101,185,
        +52,+89,110,+44,159,+77,173,+17,+15,+62,+12,+73,+39,181,+25,169,150,
        +61,+46,214,+18,+15,225,+19,211,129,138,+ 6,+46,+79,126,118,218,+26,
        195,214,+53,100,209,+67,164,243,250,175,+11,137,243,+86,+78,159,172,
        199,203,+49,241,+98,201,+68,163,219,181,131,224,150,106,145,221,107,
        199,193,123,196,248,+79,151,+69,232,178,209,+16,243,249,141,103,+14,
        245,102,202,+59,239,234,127,+20,+ 8,178,+53,150,134,+89,232,162,192,
        214,+30,178,162,+98,+74,103,179,224,222,245,+63,+83,206,+36,+26,155,
        227,165,+26,+65,104,139,133,105,+95,194,178,148,+58,109,+15,213,+80,
        150,+39,179,180,174,+ 7,193,+42,178,164,+19,237,+13,239,+26,163,251,
        181,+86,144,253,+69,146,143,228,+57,240,107,132,+78,242,124,+30,175,
        +25,223,202,+27,154,+64,238,125,130,145,+78,191,118,185,178,136,156,
        +84,151,251,169,+ 6,177,+49,233,251,+99,+42,242,173,118,+39,103,237,
        + 1,+49,+17,206,171,+67,+21,+51,232,169,+76,120,+81,170,159,+ 5,160,
        +20,+44,+81,167,+30,+53,118,158,253,+15,+40,185,182,+55,136,154,174,
        +53,227,+76,152,186,+44,141,153,163,188,220,126,158,+97,116,124,135,
        178,+40,120,+92,186,105,+52,214,143,143,+15,222,158,+50,113,+56,109,
        + 1,109,+15,+57,+19,+34,161,+42,216,218,193,193,195,+78,+77,+22,123,
        + 2,201,+67,132,211,122,+56,+62,104,137,+70,168,217,+19,+17,102,+11,
        +67,+73,140,+80,236,+43,+ 9,+67,162,133,147,131,+36,+23,164,210,113,
        107,+11,+90,+75,+31,+29,+30,151,157,+10,+33,211,201,+60,192,231,107,
        +73,218,192,148,+89,143,150,+33,215,+20,145,225,241,100,162,222,+81,
        125,+56,+72,+22,+29,101,+94,155,227,+89,+62,+11,+84,105,+13,141,173,
        148,+74,+37,+11,+37,+30,+73,115,+92,+15,130,+89,164,+37,+90,123,227,
        +31,+60,+81,242,252,183,+62,130,202,219,+86,164,162,204,223,+27,187,
        +95,+57,+43,+49,107,213,150,105,+13,162,+40,103,237,136,180,115,202,
        158,+52,216,137,+ 5,180,196,160,248,+37,163,+55,151,+99,242,221,249,
        244,+11,+44,+ 7,193,+42,213,+19,+73,211,178,211,+14,+69,105,229,+26,
        116,102,+95,+20,+98,205,+42,+60,+81,108,+93,+34,113,113,120,+18,175,
        +23,+81,+94,+54,+71,+13,+24,241,179,+28,+53,102,146,240,229,162,+49,
        +16,+72,148,181,211,179,245,152,250,+36,197,+ 7,+73,159,+39,166,164,
        +93,+42,236,157,150,+44,153,+56,+44,+21,153,123,+46,+21,204,240,249,
        232,139,+62,185,118,194,+93,170,+20,120,+69,141,185,164,+30,205,176,
        +31,+ 5,165,+20,+58,+28,245,229,+90,+57,212,214,145,+55,+63,154,+85,
        241,106,190,198,230,+97,+67,175,+44,+ 7,243,236,163,+53,229,206,116,
        119,168,+63,105,165,155,+18,248,125,+20,+37,233,+40,183,+68,+22,+98,
        +23,194,136,145,104,182,+69,+49,+55,+30,215,208,174,234,127,+20,+ 6,
        208,247,171,+42,100,+41,165,241,161,+20,+44,+88,249,166,132,225,189,
        +22,+12,+66,+14,199,+11,+88,136,211,222,+30,133,102,+74,+37,+14,207,
        130,179,+31,+22,+90,+11,+44,199,205,+81,+38,+23,130,+44,148,184,225,
        +63,+42,213,+14,151,146,201,166,144,221,215,246,172,213,+86,+20,232,
        +87,+ 7,212,106,201,132,161,103,217,+95,130,218,+31,113,161,+92,125,
        157,+20,+12,+94,+22,+89,233,166,+45,244,121,187,122,+64,121,199,214,
        105,+ 5,154,163,+78,152,224,224,232,179,+72,140,203,104,+ 9,+80,172,
        203,196,+80,166,+86,153,+90,+59,+81,+95,136,+36,+66,218,114,248,145,
        141,105,243,197,+20,+90,+83,+51,+17,+70,129,180,+60,228,+76,+75,+ 5,
        167,+22,+42,126,244,137,+34,207,140,+81,224,158,113,239,147,+15,148,
        241,167,+ 5,218,+ 1,210,116,186,212,+81,100,+25,161,+54,134,232,+58,
        +69,242,143,214,+82,197,+94,172,224,224,232,178,196,120,+89,110,+93,
        +11,+22,+90,+22,103,233,+62,+ 9,104,143,+52,229,186,115,+34,229,194,
        +85,173,151,106,207,+12,124,149,+74,+45,167,201,+ 5,162,+33,231,229,
        158,+89,243,+14,139,+31,+68,+60,224,+98,161,+42,210,+11,+23,+61,121,
        182,234,116,+80,178,+81,184,+53,+85,253,233,207,194,178,+36,+23,+53,
        189,+34,126,+84,230,+35,+71,193,107,+81,226,107,+39,209,+65,127,199,
        194,143,+20,+68,+15,163,190,127,+16,+77,186,+23,210,255,+83,224,157,
        +47,+37,155,+11,+75,106,+79,224,189,+52,+23,217,168,+69,+22,+40,165,
        +36,139,+78,+77,+28,231,208,121,196,220,101,234,+84,158,+44,135,229,
        147,139,195,+74,+73,+61,+64,243,+ 9,150,105,+13,+81,110,124,+86,194,
        +80,232,162,233,+17,225,166,+ 6,173,+38,+93,172,159,149,106,141,+12,
        178,+80,179,194,+20,+40,116,+89,100,+91,+30,+77,+99,+93,207,130,+21,
        237,+48,+81,+34,185,150,108,+77,105,+40,114,118,+89,246,+87,+ 3,224,
        175,139,+99,203,188,+61,199,217,253,+77,137,166,+55,+95,+79,+38,+75,
        243,126,149,+79,142,231,101,108,173,+72,248,181,192,124,109,166,143,
        +58,+45,118,129,145,120,222,186,+19,+81,186,109,+11,161,195,+79,143,
        137,211,253,+63,195,231,207,210,+82,+33,211,+17,+61,+19,228,196,202,
        105,199,145,120,+36,211,197,+37,+26,196,241,167,199,+51,+26,+53,151,
        179,143,137,240,+94,249,248,158,113,102,+74,+37,159,193,+48,148,120,
        169,212,154,201,252,+64,+15,+10,+37,+39,188,+92,+10,+38,147,+77,+97,
        +32,186,+22,122,+39,241,123,+56,164,+61,+74,224,191,182,136,146,+62,
        204,+74,162,148,+89,177,+23,+41,+27,198,215,112,202,217,195,230,+ 6,
        101,251,163,213,+54,133,209,105,+59,136,176,103,+71,143,164,211,197,
        158,236,+41,116,139,+78,104,+15,109,+82,+ 9,169,+79,132,127,+20,+69,
        254,181,+67,+84,140,+ 4,+84,151,+88,194,207,+29,+27,150,213,+81,193,
        170,150,121,228,147,+97,120,146,233,244,164,205,+81,+30,136,+11,194,
        150,141,162,204,125,+28,210,193,141,+ 3,219,+47,231,+ 5,154,219,+98,
        123,100,164,212,137,174,150,176,221,+30,147,100,+58,202,+42,117,+65,
        118,236,208,+79,218,107,+97,137,195,+96,+63,136,+27,206,190,+19,+92,
        140,147,252,+38,139,+69,178,+34,237,+60,+51,+91,+87,+18,+44,123,+62,
        + 4,101,142,162,217,+24,+80,183,+ 7,128,+63,111,147,178,198,+50,+32,
        243,233,150,142,244,+90,+26,+20,+64,194,214,+94,153,162,157,+29,+46,
        147,166,213,168,+62,+11,+90,169,+ 1,219,133,+60,236,148,152,+57,252,
        +18,147,+66,+70,101,173,165,+35,+65,+27,170,152,211,188,+76,164,+89,
        111,108,231,137,+74,207,+79,108,211,162,+82,126,216,202,181,135,162,
        +58,137,194,204,208,130,185,174,143,+17,+17,+22,170,246,235,153,102,
        144,186,+52,+ 7,215,172,+26,146,+93,+22,+36,147,213,196,104,248,+37,
        166,+47,+92,+23,+ 3,224,198,106,+54,+33,+62,+93,+11,+45,209,+16,+62,
        108,+49,161,122,134,166,248,175,160,+89,234,+91,124,199,205,+92,255,
        213,238,199,158,154,+42,101,+68,152,+86,101,210,+55,179,165,204,+41,
        117,238,127,+58,+66,+74,+52,+13,+37,246,230,190,185,134,+44,249,+79,
        +56,121,+85,+72,233,+53,230,247,171,203,229,+86,174,+ 3,102,184,200,
        +15,247,+44,115,162,145,155,200,105,205,102,218,+34,+61,+17,146,141,
        +62,167,213,240,149,201,252,+71,222,201,234,174,+ 8,+26,203,120,136,
        236,+71,239,+76,222,160,161,214,199,169,+48,108,231,151,+11,+ 1,138,
        +34,+82,180,158,+73,174,167,+25,192,197,+91,+76,192,+17,+79,191,122,
        109,+21,205,+94,246,110,119,155,186,+92,+46,182,223,200,+52,220,203,
        137,247,+75,+66,186,189,108,+ 7,205,110,252,+43,+43,+30,+83,+38,155,
        115,+98,127,+86,174,+58,117,+47,171,+24,159,+ 6,111,203,205,205,177,
        242,+40,215,+65,+85,115,+54,113,108,165,217,245,+94,+87,234,221,172,
        +54,253,167,244,184,214,216,103,170,164,102,178,202,+53,185,168,142,
        222,+33,+50,242,215,+63,+79,+81,+87,+96,118,200,214,235,230,+71,209,
        187,103,153,162,147,+20,+86,185,+89,185,242,+27,+69,214,+37,+95,+59,
        161,154,183,249,215,224,134,+51,245,+25,+30,+88,181,209,187,205,213,
        +78,122,+42,179,119,168,147,125,229,+76,111,216,+47,149,167,+23,158,
        206,173,140,201,+83,126,223,184,+31,205,228,218,+46,177,+22,101,194,
        232,176,103,188,200,243,+87,+75,152,200,249,172,245,104,212,139,242,
        +45,+ 7,175,+27,+17,214,241,+29,+55,203,153,+ 2,+32,177,+41,156,110,
        +99,119,195,+26,+39,+83,175,+53,+24,241,214,+16,127,241,163,+69,+56,
        109,+84,+58,169,181,+74,170,+71,222,+ 1,214,127,189,+37,156,110,235,
        165,233,111,204,102,164,201,+98,+61,214,+68,143,+62,144,218,+34,+11,
        148,133,154,+42,175,+29,+74,218,173,+55,+ 3,+17,160,155,+41,110,169,
        232,214,+90,121,245,+85,+73,144,227,+26,250,203,+81,249,242,227,+17,
        +67,165,154,249,118,+33,115,+43,+61,+18,193,115,156,186,+54,128,221,
        +12,188,141,246,+35,+83,+45,127,157,148,184,191,152,125,234,223,231,
        195,+85,+56,+62,186,145,107,+83,+34,230,+52,110,+13,158,162,225,184,
        249,+52,248,+71,213,224,114,151,+89,229,254,135,209,154,178,206,+69,
        +78,+ 0,186,+79,236,214,+79,130,+89,118,108,+13,161,184,+36,162,+20,
        223,+26,+ 2,+89,225,138,+63,123,+79,136,236,251,141,120,248,+47,+80,
        211,+90,157,+73,196,210,232,+22,178,124,112,+82,163,164,108,139,+53,
        + 1,207,130,+22,206,181,+36,146,+69,146,133,151,227,165,241,+49,+49,
        244,+77,+86,+20,178,+72,177,+83,130,235,+18,+73,100,+58,+93,154,+33,
        +71,146,+72,+20,+45,+28,+66,209,131,+46,+81,177,134,+34,137,+ 9,235,
        143,150,148,217,209,+98,167,+65,+28,+35,+ 5,+99,+58,+94,+22,+35,131,
        162,197,146,131,+47,235,+10,196,146,+44,+89,+60,116,+89,+96,+58,126,
        162,139,225,227,+66,121,165,233,+44,+80,248,179,236,174,+ 7,+69,+ 2,
        211,146,161,+89,151,+39,182,+44,148,+74,+60,228,+71,158,161,246,+90,
        241,209,+64,181,147,162,177,212,+40,213,+79,158,116,178,+81,116,141,
        212,210,161,+61,136,+35,+90,243,+70,132,118,202,124,218,+11,+37,+23,
        +70,180,+92,184,+78,214,130,203,163,+84,+90,+38,159,123,182,128,124,
        +90,+50,109,189,180,+63,+52,+69,+31,121,+52,186,+44,+ 5,143,151,+66,
        205,+82,125,100,165,+94,+70,232,246,211,+99,182,214,198,242,113,+70,
        +25,179,+38,158,112,225,160,183,+84,148,234,107,106,208,+49,201,250,
        224,181,+31,+46,139,225,+66,137,+ 7,150,152,+32,180,203,+13,129,+96,
        +95,167,116,+92,+ 7,+59,+78,+20,+25,+36,216,+75,174,133,150,228,209,
        242,204,189,+22,+63,+76,172,199,+69,+11,+70,+25,177,+55,226,133,158,
        164,179,104,109,+79,182,+81,116,+44,117,+89,+73,187,214,+61,242,+53,
        129,238,+27,+49,194,+74,228,197,247,+86,+54,191,113,135,+29,+ 7,200,
        173,153,+90,118,+36,+71,+69,+11,+60,145,+72,182,223,+53,220,215,+20,
        171,+ 0,+88,164,+82,230,164,+46,189,+62,+81,102,198,189,181,153,219,
        +98,+58,221,194,176,164,139,+60,148,236,137,+87,135,170,161,+80,+ 8,
        102,174,124,+18,205,138,+38,+47,+42,+19,145,199,+25,101,+91,+71,+42,
        114,+22,208,211,154,120,239,+36,+89,231,+35,+13,+17,229,165,112,+63,
        +44,181,+20,108,133,+11,+46,201,131,242,205,188,248,162,+94,+62,+37,
        158,193,173,+31,+45,165,218,201,240,+66,217,194,247,109,214,105,215,
        160,137,+66,232,125,+23,+69,225,232,155,+19,110,+44,248,139,+75,198,
        150,122,178,205,190,+96,+ 9,182,106,+30,+23,107,+85,+55,207,230,+16,
        242,+37,241,102,+44,216,151,+51,162,205,204,177,192,+87,+54,134,+84,
        185,217,240,+74,182,164,145,197,192,+73,248,+78,207,162,+76,179,182,
        +38,231,112,236,187,159,+ 5,244,+15,138,+95,+71,180,215,248,+40,154,
        +88,155,+65,115,181,241,102,+62,189,148,+95,+15,+86,119,139,+28,236,
        114,199,139,+27,+92,+88,110,+67,124,142,+90,124,146,147,144,+76,108,
        +90,+50,109,109,+50,176,165,+19,147,143,+52,230,168,148,159,+33,+96,
        125,232,200,206,214,177,164,+27,156,239,109,128,248,+37,154,164,120,
        +90,209,240,+75,+53,226,135,137,100,146,104,179,+72,120,+38,254,+59,
        +64,107,143,172,183,+38,162,136,148,+74,+38,139,+39,+15,138,+22,108,
        +79,212,+89,230,+26,+10,202,118,180,150,+91,150,+36,210,+73,+52,186,
        +46,133,150,+67,181,205,102,+74,+63,+36,+67,+19,+13,+58,118,+ 2,235,
        130,224,124,+21,153,+40,180,175,+37,154,+33,+66,207,+ 8,146,+45,+16,
        147,224,150,104,137,247,245,+90,+30,161,119,+92,+15,219,+27,206,183,
        +36,129,+66,207,178,211,+15,+91,161,241,225,217,+69,145,117,+63,+92,
        215,+66,211,167,182,198,200,222,+15,203,+53,+72,168,159,207,+30,155,
        107,+19,183,121,+18,188,213,+27,+83,192,+28,+22,+40,177,+53,164,209,
        240,+74,165,+22,245,230,225,208,169,209,+86,182,221,+75,+37,+82,131,
        +39,+87,194,135,193,+95,218,+66,+82,224,101,109,+44,124,+89,+50,+49,
        224,+87,+70,246,126,+80,161,+96,142,+88,240,229,+40,+81,173,156,+22,
        106,141,+82,245,112,240,249,116,+74,+44,+ 9,165,189,107,+77,+23,+78,
        148,+60,+24,162,+85,103,+89,147,+71,+69,+ 2,+85,+32,126,112,147,+88,
        +75,172,+ 7,247,181,177,+ 4,+63,120,155,145,184,175,212,154,187,113,
        171,239,+80,+30,249,140,161,212,106,+51,+29,+49,+64,233,107,107,195,
        +88,+72,+71,+61,182,+ 5,226,146,+81,244,+94,146,137,231,171,109,235,
        116,202,209,+90,+73,+22,154,249,103,142,221,+83,211,185,169,+26,201,
        240,+75,+60,+36,+69,158,+96,163,+89,+62,+11,+96,+56,+88,146,+73,+ 3,
        162,201,+ 6,164,+89,122,104,+79,+56,248,+79,137,+17,229,152,118,194,
        146,104,137,+36,145,102,156,242,+69,+11,+78,140,+92,187,228,190,+27,
        124,157,241,+58,+19,208,172,203,233,+86,156,219,150,227,196,162,106,
        +35,+13,+81,170,+62,+84,+98,222,153,190,150,+40,+90,249,+23,180,204,
        118,137,+27,169,+ 9,212,226,139,+85,114,224,+ 6,161,209,252,223,177,
        +45,171,238,+51,109,+42,212,222,178,251,+20,253,173,+31,+92,214,244,
        173,+59,203,+41,149,+46,164,235,+ 7,252,+ 1,+25,238,+ 4,149,+91,143,
        +91,132,150,+37,157,103,+91,+75,+ 5,102,+74,+22,+56,+94,218,201,+99,
        147,224,157,+30,+31,+55,+51,248,130,215,+22,109,+ 5,+30,193,+38,150,
        110,167,105,+85,149,184,149,184,+73,+29,+98,+77,158,+61,+17,194,100,
        224,161,209,+64,173,229,+ 6,+89,+11,+28,166,142,207,175,118,218,235,
        117,+56,+44,209,151,+53,241,171,+20,+30,190,150,+74,+79,213,213,+83,
        247,176,+ 9,252,197,167,193,104,+13,113,177,196,241,227,215,130,199,
        +47,+37,+81,142,+45,143,108,208,+19,+33,+61,+10,196,146,+44,183,+68,
        225,253,+99,+74,244,205,+57,237,143,+15,150,+99,226,205,+77,+54,150,
        +73,+61,+89,219,104,154,+84,+39,161,106,201,+40,156,+68,+17,239,+26,
        188,+72,155,+ 9,201,102,178,114,+85,183,+52,135,130,121,197,152,117,
        148,177,101,192,161,+67,162,201,243,245,152,249,250,167,179,+62,+11,
        +64,+76,189,189,+66,144,158,133,231,+35,242,124,+24,143,+22,+94,146,
        207,130,+49,+85,165,112,+56,+44,+21,240,161,242,+89,231,+10,+60,+66,
        +82,+61,203,132,+94,206,+ 6,+40,+18,205,118,100,+ 6,200,214,+86,232,
        213,159,204,+98,118,214,+94,221,116,+88,227,+44,+19,208,196,+ 0,127,
        +51,214,143,+14,143,203,+55,197,209,+40,+49,+67,195,226,201,+69,209,
        110,+44,155,+46,+81,116,120,243,214,152,114,216,+18,+15,+48,243,225,
        +42,241,229,+22,147,163,167,151,+92,219,+27,117,+56,+44,157,+25,229,
        154,153,+98,167,237,+88,115,198,174,208,202,149,105,235,186,+89,170,
        182,180,185,241,101,184,179,124,+44,148,+93,+30,+13,127,126,147,130,
        201,118,164,+18,141,+61,231,+31,116,179,105,+92,+22,166,200,154,+91,
        +30,109,227,+27,156,216,133,143,219,+25,211,+70,+56,107,+43,+82,255,
        +21,+71,163,140,177,249,105,142,194,216,218,184,199,237,+38,+48,163,
        +54,+98,197,+27,+33,+72,228,+30,180,132,240,201,197,232,187,121,+90,
        +27,161,244,+95,223,149,255,+26,177,+86,212,208,+83,+13,+32,+41,149,
        194,120,215,201,137,251,209,+14,+51,+84,+62,+ 8,237,+84,232,179,198,
        +36,219,209,+66,201,+71,144,+72,172,139,203,+92,+40,245,237,+20,234,
        106,168,159,156,+53,152,156,+61,+41,211,+84,+72,+54,+39,156,111,145,
        +41,170,145,228,176,228,+74,159,+98,227,217,240,147,+71,+87,219,207,
        166,157,191,187,186,147,+77,+60,196,247,+79,160,186,188,+75,228,+44,
        +13,+34,105,+83,224,150,105,+41,+69,230,+96,112,172,201,+68,244,224,
        +73,167,220,127,116,219,199,+62,129,241,104,166,+38,206,158,144,181,
        225,+17,249,103,162,+62,139,195,103,+62,+12,104,+31,168,178,+81,116,
        109,+15,133,+27,104,139,+68,+60,232,160,+98,+61,+91,+36,160,+90,+35,
        +88,+44,223,+30,+10,+32,145,134,122,+41,172,+75,181,147,129,138,+ 4,
        +53,223,+38,171,245,104,+85,101,126,164,211,104,+44,149,+59,136,233,
        251,+99,104,173,118,+99,178,209,243,+59,+41,+95,174,+50,105,+71,254,
        154,+41,244,+11,+45,207,+ 6,248,239,177,+49,105,240,102,+48,110,137,
        167,156,139,248,205,166,+36,+81,+94,+58,+77,+20,108,109,229,231,+15,
        162,+ 8,186,+22,111,133,150,226,201,+69,208,178,236,+80,253,+50,+90,
        +33,+39,193,+45,+80,193,232,219,123,+88,+ 8,+98,+88,+90,+33,+39,225,
        104,105,242,209,+19,+58,122,241,138,173,+43,129,251,104,105,205,+36,
        160,+91,164,+73,202,172,195,183,243,228,209,219,+67,+44,189,+31,157,
        142,119,+16,243,162,129,152,221,172,149,+56,+24,163,+91,109,+ 9,151,
        160,+59,157,+78,+41,111,+35,+19,134,209,234,210,220,+86,150,166,130,
        +93,177,180,+82,143,233,+20,+70,185,+26,+ 6,156,+89,+38,+22,180,125,
        +48,132,+95,162,188,125,+48,161,117,157,224,170,246,+30,+84,172,153,
        +28,248,+51,+26,159,159,+52,210,175,120,154,+91,+82,229,+11,+69,+ 5,
        101,+59,+63,+93,+22,+71,152,121,+98,211,215,+54,+74,144,113,141,120,
        +39,156,109,+13,+81,164,+44,+79,+64,180,+22,139,+50,+86,+37,+62,111,
        207,+70,+31,+48,+56,127,+88,+42,+57,+21,+17,+34,+59,216,122,102,+ 1,
        108,+ 7,193,+95,+22,114,141,+ 5,174,175,101,+35,248,244,145,+70,+79,
        +52,+ 4,130,+97,170,+52,136,134,+78,+82,124,+25,143,+27,+56,+87,167,
        202,121,103,249,109,+19,+ 5,150,+56,+77,+47,143,+40,154,+60,+62,+11,
        103,+77,159,+76,+95,+18,198,226,+22,172,146,136,163,216,156,+28,+54,
        +65,194,213,210,171,218,+80,233,119,+24,+99,180,146,248,+81,100,+40,
        +88,177,249,217,211,192,149,+56,+62,105,+65,+24,169,100,179,221,+47,
        199,+81,108,+44,+84,248,+43,+17,114,229,+27,+35,225,+45,+ 5,+35,133,
        +25,+55,198,122,165,134,123,118,166,118,+21,208,233,115,+42,186,+22,
        106,103,239,+57,+16,+54,200,255,105,+71,192,+72,+53,+51,146,205,140,
        172,103,215,212,240,233,+22,174,241,161,+88,+82,109,181,+96,+62,136,
        121,240,+75,+53,215,160,+46,246,205,197,178,+31,+77,+75,+52,169,243,
        +90,120,+53,141,183,+68,223,163,127,+46,139,+58,206,182,180,+49,194,
        +92,161,202,+68,115,179,240,172,+37,+10,+46,+ 1,+58,+28,+37,+86,+51,
        176,157,+30,+12,186,220,+42,196,252,112,159,214,156,137,139,230,173,
        +49,225,174,159,+93,217,+97,+89,219,154,234,156,+57,+40,+92,161,242,
        204,114,188,159,+28,140,+50,216,+80,122,179,227,140,+88,+35,+20,+28,
        102,168,146,107,195,188,112,195,164,+30,+28,238,175,146,248,+88,162,
        206,124,153,111,+65,+40,+58,105,167,+44,231,167,137,+98,135,207,+71,
        112,207,+93,+46,227,195,122,107,+60,+62,+44,148,107,+71,199,139,+67,
        199,+76,+84,250,+79,+13,+19,135,177,109,129,+89,146,145,+96,127,+ 2,
        207,+96,118,126,+89,+40,211,139,+45,209,+81,152,242,+41,+37,146,229,
        222,+58,101,168,187,+60,226,204,221,143,+14,+22,103,132,+41,+80,225,
        224,158,173,185,166,158,+40,161,243,249,+63,113,201,+86,180,125,+29,
        +70,156,154,+90,158,185,107,106,229,+10,+37,138,+29,+47,+77,+66,108,
        +19,135,197,+25,236,155,+82,+74,116,162,195,182,+ 3,224,166,143,+23,
        +33,206,+23,150,198,114,188,+20,+62,+44,208,146,+71,+79,233,+21,+71,
        212,+47,+22,231,135,+75,207,+76,+82,+99,130,141,104,224,+98,141,146,
        +99,+35,224,198,+ 8,164,+70,124,142,+97,+74,+31,+22,+91,211,+41,166,
        128,116,+84,169,+98,225,+46,+84,+98,135,199,101,206,+22,+99,229,148,
        +37,135,+25,+36,188,+36,214,+16,132,170,196,146,158,+18,164,121,+98,
        193,105,201,+49,134,+24,102,190,210,+75,+45,137,+ 4,147,+70,+ 9,210,
        240,177,+44,229,110,+18,155,+25,193,+96,166,222,+80,245,+40,120,124,
        +89,110,+89,139,+23,+ 8,+79,139,149,+59,+62,+76,156,148,+62,172,+95,
        +25,+40,134,191,244,252,103,+11,+90,218,124,+21,168,233,162,+22,+89,
        151,133,128,+35,+21,+ 9,217,242,204,+92,+98,203,+41,240,+83,+71,105,
        147,162,165,151,+10,186,105,+54,200,244,+15,+14,+86,160,164,+78,135,
        124,183,228,+57,+42,186,+ 5,170,172,+41,115,233,214,170,215,189,237,
        +84,+40,208,+76,158,244,109,+61,164,148,+45,+25,166,178,124,+21,240,
        163,104,152,137,224,+90,+24,+94,+65,100,+61,153,250,+45,129,+73,+52,
        +52,210,105,+37,112,+13,+19,134,206,+25,162,142,206,138,+ 4,171,203,
        150,+74,+22,105,+15,+ 4,+89,+56,242,+97,+56,124,135,182,111,111,146,
        180,+29,159,148,+88,143,147,+77,+56,179,255,+79,+50,127,+18,+74,130,
        161,+57,+42,215,+78,222,+49,166,+53,215,152,109,241,114,+25,+36,246,
        173,104,253,160,+52,168,137,143,+61,+61,+84,128,190,+99,214,+14,145,
        157,+77,173,+28,+22,+15,+71,128,+91,+90,+50,246,220,+86,+83,224,180,
        219,132,242,141,+60,236,+99,130,129,+10,206,120,183,180,+98,193,+29,
        105,+62,+77,+38,151,+69,209,167,+92,+81,+29,159,+ 4,177,119,162,+78,
        132,116,145,192,+83,+41,165,180,176,203,+41,242,204,148,173,+29,+92,
        109,173,172,+43,+59,193,+52,118,172,125,+88,121,243,107,146,+60,227,
        122,+10,231,115,+62,124,+93,+41,+18,163,229,154,120,+36,146,+81,104,
        +93,+22,+83,165,173,161,+30,+12,+80,229,115,+93,+79,146,231,197,150,
        + 5,161,116,184,+58,+93,+18,+69,+70,+26,+35,207,106,186,+92,+35,+22,
        +74,+44,239,122,+88,248,177,193,+69,184,248,+45,+ 9,101,+89,175,111,
        211,237,+57,116,+89,+83,+77,101,114,+28,161,217,241,101,161,+42,154,
        +59,+89,150,133,150,246,+ 1,+34,191,159,158,172,235,171,100,+28,248,
        163,+95,+62,+28,240,117,150,228,+37,239,+90,164,249,+11,163,206,+52,
        240,151,121,+82,231,207,103,112,+38,216,+78,+27,+ 2,220,176,156,+60,
        155,197,+92,178,+61,+17,112,172,195,157,223,+11,+55,+ 6,180,116,116,
        149,105,131,+47,227,+46,+75,+74,233,124,111,+17,227,245,150,248,+17,
        +36,214,+19,+11,106,218,148,111,139,+48,+74,132,185,+99,148,211,+89,
        184,+69,+46,+85,+58,146,+88,142,207,130,245,247,+50,105,+36,162,208,
        122,124,153,125,195,226,203,122,231,124,+ 8,186,+36,138,174,237,105,
        179,151,+ 9,+66,139,249,250,230,155,+90,206,+11,+94,216,+36,154,+74,
        207,+18,219,146,250,188,143,+ 4,+89,+96,+62,107,+79,+32,217,230,+61,
        109,+15,+48,+80,242,+50,141,+81,182,+61,+52,252,+33,142,226,+72,180,
        +69,215,186,129,+49,187,+45,+24,+ 9,130,+30,+69,183,+21,127,216,154,
        +22,+40,+22,128,+80,177,+67,178,167,+33,107,+47,+76,+85,229,139,+30,
        +60,+89,+89,168,214,116,210,208,186,+44,141,145,+96,+74,+54,228,164,
        +78,+30,+88,177,+99,228,211,+78,107,+67,157,150,139,+49,103,175,+88,
        +83,147,204,151,+75,+20,+88,143,138,+29,132,185,+96,149,+90,222,233,
        171,+38,+19,137,+36,212,254,207,+95,+22,+83,246,184,220,211,+73,163,
        182,134,+89,110,+60,+78,157,206,178,179,174,103,199,199,175,+28,124,
        154,+59,+11,+66,104,+ 9,217,217,+98,+32,255,241,+96,143,250,+80,177,
        209,249,240,+87,+68,130,116,+98,203,+42,100,+37,206,+19,+39,131,+20,
        +56,107,+33,+44,112,+20,154,+72,249,+38,186,+12,+85,101,+63,+56,+76,
        215,247,+ 8,197,+ 6,+90,206,+ 2,178,+28,+22,108,+69,151,+83,178,225,
        +56,+89,+18,+ 9,150,144,189,+31,+52,+ 2,215,+ 8,235,+73,+66,199,+ 5,
        139,+38,+78,+11,+ 4,244,245,186,+31,+22,+44,+92,225,+50,112,+80,177,
        193,102,168,126,+85,+96,+62,+46,182,213,203,+42,249,111,+31,+91,+48,
        249,189,173,173,164,168,+66,+18,131,+47,229,142,+79,150,+84,221,+93,
        +65,207,+74,181,+48,164,154,193,235,198,+14,243,+67,+86,+62,+59,+62,
        +10,232,221,+19,+73,+67,198,214,+84,+43,+13,197,108,108,247,133,177,
        146,+ 3,181,134,198,+50,+64,183,147,+13,105,+36,162,234,153,+62,+44,
        159,+28,185,+69,157,+52,+88,+41,227,224,140,+81,113,+59,+89,139,+14,
        +80,+33,+62,+75,159,+37,+82,+43,+66,233,112,+34,+92,+33,+ 9,+70,128,
        +19,227,178,225,+ 8,+70,+25,177,+12,208,+74,+23,+73,159,+29,157,148,
        +10,230,+21,148,229,121,105,197,150,235,132,145,214,211,243,215,152,
        +28,185,193,217,241,+99,130,135,+43,+ 9,+69,208,177,+81,218,210,+82,
        246,136,161,208,+83,+41,+37,229,125,+79,+36,+86,+84,209,201,233,249,
        240,+70,+40,+57,217,+82,225,+40,+49,233,240,+86,+82,195,+30,+37,+19,
        +65,+74,+12,+48,199,107,+24,195,213,161,+ 8,197,+10,151,+25,175,151,
        106,+69,139,+14,243,133,198,121,+ 2,245,127,+82,+73,+67,226,203,+11,
        209,+ 5,+52,+56,231,197,+14,+ 2,176,148,+93,+15,238,+75,143,222,160,
        161,100,130,+81,183,+46,149,+95,+30,+20,237,+96,104,235,236,197,+79,
        180,+89,232,162,141,+17,214,223,+16,168,137,182,117,152,248,180,233,
        229,+30,221,237,167,+63,126,183,248,+61,120,211,232,136,+78,+ 1,+20,
        167,206,104,199,207,+12,+89,+52,213,222,+53,227,+31,129,171,+52,+99,
        243,184,247,+46,139,226,+72,179,214,207,+84,+24,160,+79,+42,+80,184,
        +90,105,217,240,+83,+69,139,+37,+30,+ 9,225,+34,170,126,209,+34,185,
        +48,+58,250,186,117,+86,+36,146,196,208,+15,150,209,154,+42,+80,232,
        185,201,193,+67,133,208,+43,+32,+66,+92,185,242,104,237,189,151,184,
        +25,+44,+50,254,153,+56,+40,+48,+66,217,154,+65,195,104,+89,159,+14,
        226,+33,+54,153,110,133,214,+19,193,138,+45,203,161,116,177,217,249,
        218,204,223,111,+88,+95,216,229,167,+12,157,+10,200,+19,149,229,+43,
        126,+55,213,122,158,245,229,+82,+81,142,+62,127,250,166,119,221,161,
        156,+49,234,222,+85,228,230,206,+59,+77,+29,159,191,171,195,+79,124,
        126,211,170,+67,182,232,209,+76,+17,+30,+58,160,253,+74,+77,239,159,
        161,163,133,172,159,175,133,+26,192,239,+48,+85,229,219,104,+87,243,
        162,137,181,204,179,+98,120,+42,143,+19,+ 7,+46,211,+68,+60,+36,+95,
        163,117,+23,+68,147,100,+79,+46,129,106,171,+10,203,+17,233,143,+27,
        +25,+64,180,+68,249,+85,234,+50,+69,130,+21,208,178,113,+34,+23,156,
        +44,148,+44,+51,+65,+61,120,195,135,149,108,+ 7,193,108,101,+91,115,
        +72,136,243,197,+28,+22,+40,+89,+40,190,+36,139,+46,207,+52,116,+88,
        234,117,+70,178,116,+80,+33,108,193,122,+71,148,157,+ 1,165,+29,+21,
        +63,+88,138,+62,+33,209,193,192,+83,+43,+50,+80,233,100,+44,245,237,
        104,248,+47,+56,247,197,+14,146,+ 9,+71,175,109,+ 1,105,199,143,+88,
        240,+ 5,146,143,+81,+16,+54,136,148,+72,183,103,171,+59,108,243,+25,
        157,+53,147,230,182,242,205,185,104,136,121,240,+91,+67,202,140,+81,
        231,102,+68,157,208,167,153,201,+41,115,227,183,171,+77,+38,158,+ 8,
        177,101,161,227,167,130,+45,+18,+ 8,142,+78,220,154,+59,+ 9,241,102,
        196,180,197,+14,107,232,173,+36,166,+86,141,+91,+93,+89,+79,235,+70,
        +47,203,193,+86,162,+51,+94,+44,191,+29,+70,+68,254,+34,133,138,+ 5,
        127,136,+58,202,+50,+96,+43,+42,224,240,199,+71,+71,229,+26,218,116,
        236,177,105,209,203,181,166,206,246,+51,230,+29,+44,203,209,193,225,
        241,195,215,+30,+31,+53,100,193,101,162,+56,+79,160,+80,248,180,+70,
        +26,115,249,+28,+68,117,180,+85,+16,+56,110,+17,211,109,+17,134,242,
        +61,233,179,+47,+13,+24,162,216,+80,+98,135,+ 5,+90,233,103,130,+45,
        112,180,150,+93,203,156,+38,210,139,+73,217,+70,132,149,+40,180,+39,
        151,195,132,145,217,217,+70,184,+90,225,233,111,+93,142,219,208,+86,
        209,138,+28,+36,218,+49,197,245,+67,198,148,+92,155,120,+66,126,208,
        150,218,181,+41,+38,172,146,106,167,143,+28,+58,+73,228,171,+28,+52,
        229,241,167,159,+37,+91,+75,213,220,174,+20,+72,+85,+92,106,201,+40,
        212,+71,125,105,+93,207,218,163,+72,+45,+25,+54,182,+84,254,127,104,
        182,+63,+83,193,+68,116,+45,+61,236,+46,+74,+91,+67,104,+88,163,+84,
        210,+19,+39,193,123,+98,207,126,118,249,141,+12,248,+45,101,233,147,
        241,+30,+93,+83,+39,+ 3,159,172,199,205,161,170,+60,177,106,132,143,
        120,211,167,199,+63,123,102,156,211,167,137,+91,151,230,130,180,+52,
        + 7,156,105,+ 9,+27,191,167,135,141,212,197,+30,171,213,+22,140,+11,
        211,207,160,+89,177,+68,249,122,+74,+76,161,+57,+49,104,179,+38,158,
        +56,249,172,159,198,+74,+97,105,146,+15,150,135,128,+90,+39,+96,106,
        103,+69,+ 3,+16,+72,153,148,+11,+89,+63,123,+98,207,148,154,108,+43,
        178,125,167,+53,103,128,+91,162,+98,210,203,+31,159,+ 4,178,113,+36,
        178,+46,+73,+38,128,248,145,186,+77,+38,158,+68,237,239,+90,144,+75,
        +23,+11,+64,+40,116,116,144,121,+35,165,130,113,+39,159,+44,+85,105,
        +59,+93,+26,193,103,166,+11,+77,+60,+40,+49,+67,194,135,201,167,156,
        107,+39,237,+82,+35,207,134,216,+14,+74,134,+49,143,178,218,+27,155,
        +78,109,+ 7,137,+68,163,199,+37,+39,+17,+56,+44,214,222,+64,179,110,
        +74,+37,+30,+57,+40,250,135,115,+25,+31,+68,+ 0,172,100,+79,218,215,
        145,105,135,133,142,+78,207,154,+34,236,+17,139,+54,+65,210,+69,134,
        +10,202,124,+22,132,118,154,+10,202,176,173,199,183,+ 2,+41,+ 5,173,
        109,+58,+42,112,212,218,+10,196,146,+59,121,+16,166,+90,114,206,123,
        112,+32,+19,132,154,104,178,+81,+50,124,+19,213,140,163,+90,+76,156,
        +44,+39,135,201,+50,193,+60,+62,+44,210,+78,239,122,+75,156,173,105,
        +67,230,156,186,+44,203,+10,120,236,+97,139,+28,+37,206,138,182,179,
        180,217,218,208,186,+94,199,+22,+91,+79,130,184,+20,111,103,169,+20,
        171,197,+ 4,250,228,+81,227,215,+ 6,192,211,231,179,+41,+23,108,200,
        +62,104,+92,251,170,222,+54,149,161,236,203,150,+10,192,188,159,+ 6,
        116,+10,221,+13,208,250,+45,133,166,+88,169,+96,184,+60,117,+86,168,
        142,+54,+86,134,217,+26,180,102,219,234,218,155,+45,+17,134,156,118,
        124,+21,209,100,121,138,138,+13,161,164,+79,+28,248,+11,194,232,+89,
        190,+44,199,201,160,174,107,164,105,154,+65,104,250,+68,+69,188,164,
        +18,151,+30,+19,+81,244,159,+22,198,212,214,130,143,+72,240,+87,+ 3,
        +13,132,224,+97,134,+26,+41,+37,110,+63,218,+10,234,222,206,+22,+82,
        199,+ 5,154,161,114,137,227,179,230,211,123,209,154,104,234,144,+49,
        +82,186,+28,137,+44,232,179,+81,207,135,+21,228,201,253,+77,150,192,
        126,+89,169,+61,+98,105,178,+78,178,215,143,226,+ 9,+82,+19,+39,+29,
        232,144,+37,115,+92,239,191,149,+24,+87,227,189,+69,251,+51,+11,228,
        201,151,+68,+ 8,+91,+42,+46,214,+ 7,202,+98,199,+40,+39,161,170,135,
        120,123,+61,+ 5,197,116,212,147,136,+71,+92,179,212,181,197,240,166,
        +67,+ 0,224,181,212,+57,219,+89,175,216,215,+79,+34,101,+58,+73,222,
        +98,+81,237,214,211,198,144,242,+ 5,202,+53,166,208,246,+17,+48,109,
        109,+89,169,+53,194,207,+44,+23,149,108,+ 7,173,105,234,222,+56,105,
        162,226,+52,222,+10,+71,+13,186,191,162,+65,229,+94,141,243,+35,242,
        217,159,125,188,159,+22,122,169,192,210,+13,+98,+60,227,+53,+52,131,
        +88,+72,+71,+57,183,+14,218,107,142,181,+98,237,162,166,179,104,+28,
        230,+59,+99,+53,+67,241,194,254,+17,+76,123,210,227,+87,122,+72,+54,
        135,150,174,165,210,164,223,202,162,147,+84,152,158,241,106,167,+43,
        +83,111,+23,+67,+ 7,213,+55,+38,+ 8,127,179,242,179,+23,+54,246,183,
        213,176,+30,217,172,+52,+ 2,137,100,211,223,183,+38,163,+83,146,100,
        +50,237,+41,187,+60,+ 2,+78,162,113,240,106,108,197,+45,231,+46,+42,
        230,162,108,+21,+82,+43,194,190,123,211,+79,251,+52,+69,238,+21,221,
        229,105,153,224,239,+17,+46,100,+46,+35,227,102,118,115,154,+88,185,
        240,206,+49,246,+20,+98,251,+90,103,165,+21,+81,+ 7,+63,174,251,+48,
        + 9,245,+69,231,142,+62,+45,+60,+67,228,204,134,+22,176,126,243,109,
        109,116,+77,+76,+44,+90,+42,137,211,245,210,+42,+83,217,159,+ 5,172,
        189,+84,251,+ 5,+90,161,+68,131,+86,+75,182,183,200,+60,120,150,223,
        +24,+98,209,112,138,+67,226,191,178,232,241,167,213,+78,162,+89,230,
        180,+97,241,107,170,198,140,186,+22,158,+12,171,104,107,+79,+85,+51,
        +20,211,+ 5,150,226,213,164,218,120,+83,+47,108,252,147,156,+23,106,
        163,+39,150,+ 5,245,230,222,+32,240,250,226,137,186,+68,105,+48,+88,
        232,170,100,101,146,+96,+70,208,146,125,251,172,+ 3,224,182,+26,169,
        222,104,117,172,177,201,+42,+25,141,+90,209,251,+84,153,+50,127,167,
        130,+44,243,205,+26,+98,+39,190,+59,122,+43,192,149,157,233,+78,+14,
        163,211,+49,209,117,137,119,+62,+ 9,+70,168,245,143,+ 4,222,226,142,
        +57,252,123,106,109,+54,+ 3,178,139,+17,+69,205,174,190,146,+97,231,
        +26,201,251,+90,+63,110,107,+25,+70,226,124,245,133,203,182,216,164,
        172,211,182,+ 5,123,+90,194,214,106,117,+85,180,121,207,+37,122,110,
        138,+50,+ 1,158,+85,+15,+78,250,116,219,230,144,121,230,248,242,177,
        199,169,201,+19,137,221,+22,135,190,+40,221,171,+44,+30,181,163,240,
        188,219,236,+20,+40,116,177,+20,127,118,213,146,+ 4,+62,+12,204,173,
        149,228,170,+64,156,+22,154,122,172,119,145,129,185,+87,236,129,+ 3,
        209,+20,+92,+60,183,+56,+44,148,+45,122,+32,247,+79,125,149,+ 4,243,
        211,155,185,143,+86,+10,+58,+40,+90,+61,+ 5,138,159,+ 5,102,104,+81,
        +30,159,+ 5,+55,+22,200,135,159,+ 5,+98,125,216,133,198,106,+47,141,
        + 8,+47,+54,186,+54,132,217,217,242,205,+57,163,+89,+58,+40,+20,212,
        205,133,+14,207,130,214,143,151,+67,132,145,103,208,+12,+66,+15,227,
        +64,253,+71,103,229,150,230,208,+88,178,+81,+56,245,197,158,+34,175,
        148,199,133,150,227,179,242,239,+42,186,+38,151,+69,153,105,+76,150,
        136,195,+84,111,141,+56,179,+84,+62,123,+53,177,126,140,+60,+74,211,
        141,205,+36,112,243,145,+67,+62,+ 9,105,141,155,+67,219,+71,124,232,
        160,102,149,156,105,230,124,208,+67,+63,+57,+90,219,+65,102,168,246,
        +13,+30,111,+73,147,150,212,164,202,+ 5,158,136,249,+52,154,+77,+22,
        +91,139,+52,147,179,233,165,143,171,+38,+52,+55,141,120,211,243,199,
        182,155,+50,108,213,149,234,+15,130,153,+44,244,171,+43,232,+77,102,
        178,180,+ 7,202,121,107,160,230,187,+54,+75,219,+68,146,231,+20,255,
        201,+16,+ 7,228,+89,+10,+31,+52,+ 5,152,+43,122,+73,+46,+53,196,+17,
        +97,155,+ 0,195,+39,158,+76,+97,215,118,180,208,154,114,233,112,146,
        178,172,231,201,150,232,+89,+98,+60,+62,+44,148,+77,+ 5,108,+44,+19,
        241,206,+ 2,118,124,+89,231,111,149,214,+85,168,232,162,101,102,+46,
        112,118,116,219,+47,180,+90,141,202,+53,211,179,241,+22,143,113,249,
        +64,196,+33,185,199,+64,254,+59,231,229,154,164,+76,158,173,227,211,
        + 9,+91,170,153,129,+19,199,103,235,+19,+70,+56,104,197,159,+42,+99,
        194,209,+62,+29,101,+44,+84,252,178,192,124,+89,177,+47,137,+36,212,
        +68,+39,+37,+62,+13,+83,147,224,197,+ 2,+42,167,193,+95,+18,111,158,
        +89,177,+61,138,220,184,+31,180,+ 3,226,209,+56,158,180,248,+55,+81,
        101,125,+89,210,124,+26,167,179,+23,+86,187,186,151,127,242,143,+23,
        +48,+ 2,232,244,+79,224,241,105,242,205,+14,+96,135,195,+56,110,+69,
        159,146,+32,133,138,159,+38,203,+60,+57,249,101,185,116,+44,189,+14,
        182,+60,221,+90,162,207,+96,118,180,150,120,+34,199,231,199,117,195,
        +87,+72,226,+77,+52,+25,171,124,145,+ 5,136,211,+64,+11,+78,+59,+29,
        169,+92,+41,174,145,+38,120,+59,142,117,180,248,+47,188,241,231,103,
        215,220,+13,+65,103,110,+99,223,157,220,216,189,239,146,182,145,180,
        202,+27,100,+35,226,110,212,+34,+69,120,+49,231,148,+89,253,+82,232,
        130,+95,111,159,250,216,177,176,+11,+12,244,247,+61,+47,+98,242,255,
        +64,114,121,158,+81,239,217,123,103,107,207,+75,+16,+76,143,185,215,
        +89,148,126,163,132,196,212,207,+42,189,164,171,181,+77,+18,+22,209,
        +57,228,220,245,+35,219,244,103,+38,159,137,+75,119,137,235,104,171,
        +80,+58,124,180,246,139,194,121,+50,114,242,141,+57,180,+44,+71,211,
        227,+77,+20,248,+45,222,160,218,+85,236,+23,+66,203,118,223,+93,189,
        128,182,139,141,110,150,132,218,+50,247,+45,161,177,+47,+77,100,232,
        170,110,121,199,141,+45,+50,132,209,+81,123,168,+55,123,+56,154,+77,
        +52,230,209,+84,216,165,197,195,+70,123,105,130,+30,113,250,139,+70,
        + 2,+35,209,186,+45,+31,210,179,+79,205,+52,127,147,192,243,+53,110,
        252,136,254,117,170,138,+21,+98,162,+73,+80,+41,237,158,217,105,159,
        +53,173,121,+77,165,116,157,+82,235,167,247,199,183,178,+ 3,+29,+79,
        +17,+48,+11,+85,107,+85,183,+26,211,+92,+58,+59,+43,+82,146,103,+57,
        192,142,+11,+ 6,+51,+49,167,+45,+51,+35,222,+71,121,+32,186,+76,+69,
        +16,+74,217,207,+56,240,+85,218,154,+19,111,+42,+19,180,236,247,199,
        237,105,174,+69,107,201,+46,251,165,203,181,+11,183,237,140,135,181,
        +37,231,203,103,246,+88,139,190,185,+66,215,+26,+15,109,117,210,126,
        244,+77,138,+38,109,182,119,+ 3,166,145,+95,+53,101,171,+48,146,202,
        157,122,184,+97,+48,+ 5,248,130,+98,+43,+19,206,213,+66,+77,189,+68,
        215,209,+ 8,121,130,149,+22,+42,+31,+52,234,169,+23,+69,+19,131,204,
        121,230,138,188,119,162,160,211,210,+51,160,+95,+67,+94,+22,+93,+65,
        +62,+67,104,156,152,179,216,+93,124,+85,+72,242,198,227,+97,137,186,
        169,152,118,244,229,105,126,+52,148,101,142,166,186,+40,+89,+58,145,
        +93,+11,+53,+68,165,+92,+ 3,169,237,171,+15,+95,180,183,+15,+44,126,
        210,158,+83,177,+79,116,243,143,153,+84,+40,185,123,197,226,247,+25,
        115,+67,+23,104,105,211,224,188,228,125,147,+13,+77,161,174,137,167,
        162,152,144,250,164,121,119,230,174,117,+82,121,180,123,+ 0,+85,113,
        + 6,+86,+46,149,+21,178,173,+30,111,209,197,186,251,101,172,+88
    };
    int32_t off  = state >>  0;  // 18 bits
    int32_t code = state >> 32;  // 24 bits
    int     idx  = off >> 3;
    int32_t bits = words[idx];
    int     len  = 8 - (off & 7);

    // Decode delta bit length (4 bits)
    for (len -= 4; len < 0; len += 8) {
        bits = bits<<8 | words[++idx];
    }
    int dlen = (bits >> len) & 15;
    dlen = dlen==15 ? 18 : dlen+1;  // 1-15, 18

    // Decode delta (1-18 bits)
    for (len -= dlen; len < 0; len += 8) {
        bits = bits<<8 | words[++idx];
    }

    // Decode word using base-26
    int32_t mask = (INT32_C(1) << dlen) - 1;
    code += (bits >> len) & mask;
    word[0] = 'a' + code/(26*26*26*26)     ;
    word[1] = 'a' + code/(26*26*26)    % 26;
    word[2] = 'a' + code/(26*26)       % 26;
    word[3] = 'a' + code/(26)          % 26;
    word[4] = 'a' + code               % 26;

    return ((idx<<3) + 8 - len) | (int64_t)code<<32;
}

// Create a hash table of the word list. The table must be initialized
// to all zeros.
static void
words_init(uint32_t ht[WORDS_HTLEN])
{
    int64_t state = 0;
    for (int i = 0; i < WORDS_TOTAL; i++) {
        char word[5];
        state = words_next(word, state);
        uint32_t w = ((uint32_t)word[0] - 97)*26*26*26*26 +
                     ((uint32_t)word[1] - 97)*26*26*26 +
                     ((uint32_t)word[2] - 97)*26*26 +
                     ((uint32_t)word[3] - 97)*26 +
                     ((uint32_t)word[4] - 97) + 1;
        uint32_t h = (w*0xd168aaadU)>>16 ^ (w*0xd168aaadU);
        int i = h & (WORDS_HTLEN - 1);
        int s = h>>18 | 1;
        while (ht[i]) {
            i = (i + s) & (WORDS_HTLEN - 1);
        }
        ht[i] = w;
    }
}

// Return non-zero if the word is in the list. Loads exactly 5 bytes
// from the input word, which must consist only of 'a'...'z'.
static int
words_valid(const uint32_t ht[WORDS_HTLEN], const char word[5])
{
    uint32_t w = ((uint32_t)word[0] - 97)*26*26*26*26 +
                 ((uint32_t)word[1] - 97)*26*26*26 +
                 ((uint32_t)word[2] - 97)*26*26 +
                 ((uint32_t)word[3] - 97)*26 +
                 ((uint32_t)word[4] - 97) + 1;
    uint32_t h = (w*0xd168aaadU)>>16 ^ (w*0xd168aaadU);
    int i = h & (WORDS_HTLEN - 1);
    int s = h>>18 | 1;
    while (ht[i]) {
        if (ht[i] == w) {
            return 1;
        }
        i = (i + s) & (WORDS_HTLEN - 1);
    }
    return 0;
}


#ifdef TEST
#include <assert.h>
#include <stdio.h>
#include <string.h>

int
main(void)
{
    int64_t state;
    char word[] = ".....\n";
    uint32_t ht[WORDS_HTLEN] = {0};

    state = 0;
    for (int i = 0; i < WORDS_TOTAL; i++) {
        state = words_next(word, state);
        if (!fwrite(word, 6, 1, stdout)) break;
    }

    words_init(ht);
    state = 0;
    for (int i = 0; i < WORDS_TOTAL; i++) {
        state = words_next(word, state);
        assert(words_valid(ht, word));
    }
    assert(!words_valid(ht, "dailx"));

    return fflush(stdout) || ferror(stdout);
}
#endif
